如何通过单击更改TextView上的文本颜色?

时间:2016-05-22 15:20:15

标签: android textview

首先,我将值j,u声明为整数,因为text.getCurrentTextColor()和text.setTextColor()只取整数。
然后我创建了一个OnClickListener()方法,这样当我点击它时,它会在方法中运行代码 之后我创建了两个if条件,这些条件将持续将文本颜色切换为颜色ID" j"或颜色ID" u"。

我在我的设备上运行程序,当我点击它时,文本消失了,再也没有回来了。

我是编程新手,我无法在任何帖子中找到问题的答案。

我是否正确理解了OnClickListener()事件? 并且android:clickable="true"是否必要?

<TextView
        android:id="@+id/yourlabel"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="LabelText"
        android:textSize="20dp"
        android:clickable="true" />

爪哇

        final int j=100000; //Color id number
        final int u=690856; //Color id number
        text=(TextView)findViewById(R.id.yourlabel);
        text.setOnClickListener(
                new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {

                       if(j==text.getCurrentTextColor())
                       {
                           text.setTextColor(u);
                       }
                        else
                       {
                           text.setTextColor(j);
                       }

                    }

                }
        );

2 个答案:

答案 0 :(得分:1)

您正确理解了onClickListener而不是,在这种情况下您不必使用android:clickable="true"。 您遇到的问题是getCurrentTextColor()返回的值超出您的预期。详细答案可以在这里找到: getCurrentTextColor from a TextView returns a weird color

要修复代码,您应该在colors.xml中声明颜色,如下所示:

<color name="yourFirstColor">#0097A7</color>
<color name="yourSecondColor">#536DFE</color>

在您的活动中,您可以通过以下方式获取颜色:

final int j = ContextCompat.getColor(getApplicationContext(), R.color.yourFirstColor);
final int u = ContextCompat.getColor(getApplicationContext(), R.color.yourSecondColor);

答案 1 :(得分:0)

使用处理程序进行更改。 尝试这样的事情......

Handle handler;

然后在你的onCreate上初始化它

handler = new Handler();

对于灵活的解决方案,我正在创建一个方法

private void changeTextColor(TextView tv, int color){
handler.post(new Runnable(){
@Override
private void run(){
text.setTextColor(color);
}
});
}

这应该有用......