默认情况下将状态设置为按钮

时间:2017-09-07 10:44:31

标签: android xml android-layout

我有两个文本视图,其背景图片我想要更改。

<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变为白色且不可点击。

3 个答案:

答案 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)

当您的手指从视图中释放时,您的视图不会处于selectedpressed状态。点击事件后,您需要手动设置pressedselected状态。

 <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);
        }
    }