如何保持图像按钮处于按下状态并显示按下状态的可绘制对象
How to keep imagebutton in pressed state and display the drawable for pressed state
XML:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@drawable/vopressed" /> //light blue
<item android:state_selected="true" android:drawable="@drawable/voselected" /> //blue
<item android:drawable="@drawable/vo" /> //black
</selector>
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" />
我正在尝试在点击时更改为浅蓝色,然后更改为深蓝色。
ibS.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ibS.setPressed(true);
Toast.makeText(MainActivity.this, "clicked", Toast.LENGTH_LONG).show();
}
});
我怎样才能让它在我点击它时保持 pressed/selected 状态并且可绘制对象从黑色变为蓝色,当我再次点击它时它 unpresses/unselects 本身和变回黑色。
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();
}
});
使用按钮而不是图像按钮,因为在这种情况下您将需要两个图像资源。
使用可绘制对象:
按钮未按下状态:
<?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。
当您从按钮上移开手指时,按下状态将始终重置为 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);
}
}
});
您可以尝试使用可绘制对象的选定状态::
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 中定义的图像,并将选中的状态也放在...再次单击时...它将恢复上次的状态...
试试这个..
XML:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@drawable/vopressed" /> //light blue
<item android:state_selected="true" android:drawable="@drawable/voselected" /> //blue
<item android:drawable="@drawable/vo" /> //black
</selector>
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" />
我正在尝试在点击时更改为浅蓝色,然后更改为深蓝色。
ibS.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ibS.setPressed(true);
Toast.makeText(MainActivity.this, "clicked", Toast.LENGTH_LONG).show();
}
});
我怎样才能让它在我点击它时保持 pressed/selected 状态并且可绘制对象从黑色变为蓝色,当我再次点击它时它 unpresses/unselects 本身和变回黑色。
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();
}
});
使用按钮而不是图像按钮,因为在这种情况下您将需要两个图像资源。
使用可绘制对象:
按钮未按下状态:
<?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。
当您从按钮上移开手指时,按下状态将始终重置为 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);
}
}
});
您可以尝试使用可绘制对象的选定状态::
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 中定义的图像,并将选中的状态也放在...再次单击时...它将恢复上次的状态... 试试这个..