将背景颜色设置为元素

时间:2017-09-07 07:11:37

标签: java android android-layout android-fragments

我的xml文件中有两个Text视图。

<TextView
            android:layout_width="@dimen/margin_0dp"
            android:layout_height="wrap_content"
            android:layout_weight="0.5"
            android:text="Trainings"
            android:gravity="center"
            android:background="@drawable/rounded_corner"
            android:onClick="changeColor"
            />
        <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:background="@drawable/rounded_corner"
            android:gravity="center"
            android:onClick="changeColor"/>

默认情况下,这两个背景颜色都是灰色的,由drawable rounded_corner.xml文件设置,当点击其中任何一个时,我希望它变为白色。 在我的Java文件中,我有

public void changeColor(){
    this.setBackground(getResources().getColor((R.color.dark_grey_color)));
}

我知道我可以使用setOnclickListener并在基于View的按钮的id之间运行一个switch-case。

但要求就是这样。 那么,我该如何以这种方式实现呢?

感谢。

3 个答案:

答案 0 :(得分:0)

只需添加以下代码snipet onclick textview

your_textview.setTextColor(ContextCompat.getColor(MainActivity.this, R.color.white));

答案 1 :(得分:0)

只需改变你的功能。用您想要的任何颜色或可绘制替换Color.BLUE。因为当您从xml设置onClick时,它会将其视图传递给您可以使用view获取的活动,getId可以识别执行的单击。在您的情况下,您正在传递textview,以便将其转换为textview。

 public void changeColor(View view) {
            //((TextView) view).setBackgroundColor(Color.BLUE);

           GradientDrawable bgShape = (GradientDrawable)((TextView) view).getBackground();
           bgShape.setColor(Color.BLUE);

        }

答案 2 :(得分:0)

如果您希望视图在保持其背景一旦被点击,那么您可以保留 TextView ,只需更改 changeColor上的背景颜色方法。如果您希望根据点击切换背景颜色,那么这是复选框行为。如果你想要这个最后的行为,那么按如下方式实现它:

复选框

        <CheckBox
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="0.5"
            android:text="Trainings"
            android:button="@null"
            android:gravity="center"
            android:background="@drawable/view_state"/>
        <CheckBox
            android:id="@+id/learning_programs"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="0.5"
            android:text="Learning Programs"
            android:button="@null"
            android:background="@drawable/view_state"
            android:gravity="center"/>

然后添加一个drawable来定义这些状态( drawable / view_state ):

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="true">
        <shape android:shape="rectangle">
            <solid android:color="#000" /> <!-- clicked color -->
        </shape>
    </item>
    <item android:state_checked="false">
        <shape android:shape="rectangle">
            <solid android:color="#FFF" /> <!-- default color -->
        </shape>
    </item>
</selector>