我有两个文本视图,其背景图片我想要更改。
<TextView
android:layout_width="@dimen/margin_0dp"
android:layout_height="wrap_content"
android:layout_weight="0.5"
android:layout_margin="@dimen/margin_padding_2dp"
android:padding="@dimen/margin_padding_5dp"
android:text="Trainings"
android:gravity="center"
android:textSize="17sp"
android:background="@drawable/background_selector"
android:clickable="true"
/>
<TextView
android:id="@+id/learning_programs"
android:layout_width="@dimen/margin_0dp"
android:layout_height="wrap_content"
android:layout_weight="0.5"
android:text="Learning Programs"
android:padding="@dimen/margin_padding_5dp"
android:textSize="@dimen/text_size_seventeen"
android:background="@drawable/background_selector"
android:gravity="center"
android:clickable="true"
/>
所以,我想要的是当我点击TextView时,背景图像应该改变。为此,我有一个drawable选择器
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/rounded_corner" android:state_pressed="true"/>
<item android:drawable="@drawable/rounded_corner" android:state_focused="true"/>
<item android:drawable="@drawable/rounded_corner_grey"/>
</selector>
但上述代码的问题是,只有当用户点击TextView时,它才会保留白色。一旦用户的手指移动,颜色就会变为灰色。
我想要的是在用户点击TextView一次后颜色应该变为白色。
使用state_selected:true
,TextViews变为白色且不可点击。
答案 0 :(得分:1)
将这行代码添加到两个文本视图中。
机器人:focusableInTouchMode =&#34;真&#34;
这意味着当手机处于触控模式时,视图可以获得焦点。
修改强>: 试试这个xml并检查它是否有效。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="@dimen/margin_0dp"
android:layout_height="wrap_content"
android:layout_margin="@dimen/margin_padding_2dp"
android:layout_weight="0.5"
android:background="@drawable/background_selector"
android:clickable="true"
android:focusable="true"
android:focusableInTouchMode="true"
android:gravity="center"
android:padding="@dimen/margin_padding_5dp"
android:text="Trainings"
android:textSize="17sp" />
<TextView
android:id="@+id/learning_programs"
android:layout_width="@dimen/margin_0dp"
android:layout_height="wrap_content"
android:layout_weight="0.5"
android:background="@drawable/background_selector"
android:clickable="true"
android:focusable="true"
android:focusableInTouchMode="true"
android:gravity="center"
android:padding="@dimen/margin_padding_5dp"
android:text="Learning Programs"
android:textSize="@dimen/text_size_seventeen" />
答案 1 :(得分:1)
当您的手指从视图中释放时,您的视图不会处于selected
或pressed
状态。点击事件后,您需要手动设置pressed
或selected
状态。
<TextView
android:id="@+id/sample_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="true"
android:background="@drawable/background_selector"
android:text="Hello World!" />
然后在你的代码中
TextView tv = (TextView) findViewById(R.id.sample_text);
tv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
v.setSelected(!v.isSelected());
}
});
您可以使用OnClickListener
一个TextView
private View.OnClickListener toggleSelectedStateOnClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
v.setSelected(!v.isSelected());
}
};
TextView tv = (TextView) findViewById(R.id.sample_text);
tv.setOnClickListener(toggleSelectedStateOnClickListener);
TextView tv1 = new TextView(this);
tv1.setOnClickListener(toggleSelectedStateOnClickListener);
答案 2 :(得分:0)
就我而言,我用这个:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@color/bottom_nav_normal" android:state_enabled="true"/>
<item android:color="@color/bottom_nav_checked" android:state_enabled="false"/>
<item android:color="@color/bottom_nav_checked" android:state_pressed="true"/>
</selector>
然后,在代码中:
TextView tv = (TextView)findViewById(R.id.tv);
tv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//TODO
tv.setEnable(false);
}
}