我想要以下内容: 一个textview 。)单击时更改其背景 。)保持背景直到再次点击
这一切都归结为“可检查”状态,但我无法弄清楚这是如何起作用的。这是我用于背景的xml:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- pressed -->
<item android:drawable="@drawable/menuselected"
android:state_pressed="true" />
<!-- checked -->
<item android:drawable="@drawable/menuselected"
android:state_checked="true" />
<!-- default -->
<item android:drawable="@drawable/transpixel"/>
</selector>
更新:它现在部分有效。我为自定义Textview采用了http://kmansoft.com/2011/01/11/checkable-image-button/的大部分代码。我实际上是这样做的,我也需要单选按钮的功能。 现在我可以查看Textview,但我无法取消选中它。有人知道为什么会这样吗?
答案 0 :(得分:4)
您可以使用CheckedTextView checkMark null 和 你可选择的背景
<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checkMark="@null"
android:background="@drawable/selectable"/>
您的可选择
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true" android:drawable="@drawable/selector" />
</selector>
答案 1 :(得分:1)
制作自定义TextView
实施android.widget.Checkable
界面。这应该足以让您的选择器工作。
以下是示例实现:
public class CheckableTextView extends TextView implements Checkable {
private boolean isOn=false;
public CheckableTextView(Context context) {
super(context);
}
public CheckableTextView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CheckableTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public int[] onCreateDrawableState(final int extraSpace) {
final int[] drawableState = super.onCreateDrawableState(extraSpace + 1);
if (isChecked())
mergeDrawableStates(drawableState, CHECKED_STATE_SET);
return drawableState;
}
@Override
public void setChecked(boolean checked) {
isOn=checked;
refreshDrawableState();
}
@Override
public boolean isChecked() {
return isOn;
}
@Override
public void toggle() {
isOn=!isOn;
refreshDrawableState();
}
}