如何将图像按钮保持在按下状态并显示按下状态的drawable

时间:2016-11-16 02:53:56

标签: android android-imagebutton

XML:

<ImageButton
        android:layout_width="0dp"
        android:layout_weight="0.2"
        android:layout_height="wrap_content"
        app:srcCompat="@drawable/vo_selector"
        android:id="@+id/ibS"
        android:background="@android:color/transparent" />

XML:

ibS.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        ibS.setPressed(true);
        Toast.makeText(MainActivity.this, "clicked", Toast.LENGTH_LONG).show();
    }
});

我试图在点击后变为淡蓝色,之后变为深蓝色。

var request = new RetrieveEntityChangesRequest
        {
            EntityName = entityLogicalName,
            DataVersion = dataToken,
            Columns = columnSet,
            PageInfo = new PagingInfo { Count = Constants.DefaultCRMChunkSize, PageNumber = 1, ReturnTotalRecordCount = false }
        };

当我点击它时,它是如何实现的,它保持在按下/选择状态,并且可绘制从黑色变为蓝色,当我再次点击它时,它会自动退回/取消选择并变回黑色。 / p>

4 个答案:

答案 0 :(得分:1)

使用按钮代替图像按钮,因为在这种情况下,您将需要两个图像资源。

使用drawable:

按钮未按下状态:

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <stroke android:width="2dp" android:color="@color/colorPrimary" />
    <padding android:left="10dp"
        android:top="10dp"
        android:right="10dp"
        android:bottom="10dp" />
    <solid android:color="@color/colorPrimary" />
</shape>

按钮按下状态:

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <stroke android:width="2dp" android:color="@color/colorPrimaryDark" />
    <padding android:left="10dp"
        android:top="10dp"
        android:right="10dp"
        android:bottom="10dp" />
    <solid android:color="@color/colorPrimaryDark" />
</shape>

现在在需要时将此设置为drawable。

答案 1 :(得分:1)

当您从按钮上移开手指时,按下的状态将始终重置为false,因此您无法使用该状态。 您应该通过声明成员变量

直接跟踪您的州
private boolean isPressed = false;

然后在单击按钮时直接设置图像按钮的背景

ibS.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        isPressed = !isPressed;
        if (isPressed) {
            ibS.setBackgroundColor(R.color.your_blue_color);
            //use code below if you want to use drawable background
            //ibS.setBackgroundResource(R.drawable.background_pressed);
        } else {
            ibS.setBackgroundColor(R.color.your_black_color);
            //use code below if you want to use drawable background
            //ibS.setBackgroundResource(R.drawable.background_normal);
        }
    }
});

答案 2 :(得分:1)

您可以尝试使用drawable ::

的选定状态
ibS.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
    ibS.setPressed(true);
    Toast.makeText(MainActivity.this, "clicked", Toast.LENGTH_LONG).show();
}});

将第ibS.setPressed(true);行更改为ibS.setSelected(!ibs.isSelected());

因此,它会将图像的drawble更改为selected_state图像在drawable中定义所选择的状态..再次单击..将恢复最后一个状态... 试试这个..

答案 3 :(得分:0)

ibS.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
          ibS.setBackground(ContextCompat.getDrawable(your Context,R.drawable.voselected));
        Toast.makeText(MainActivity.this, "clicked", Toast.LENGTH_LONG).show();
    }
});