【问题标题】:I want to change the color text using styles,我想使用样式更改颜色文本,
【发布时间】:2017-08-02 05:06:57
【问题描述】:

这是我的TextView

<TextView
    android:id="@+id/home_text"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:paddingLeft="10dp"
    android:text="Home"
    android:textColor="@drawable/color_state"/>

这是我在可绘制文件夹中的color_state.xml 代码

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:state_pressed="false"
        android:color="#fff"/>
    <item
        android:state_pressed="true"
        android:state_selected="true"
        android:color="#ff0000"/>
</selector>

我已经搜索了类似的问题,但我想要的是不同的东西,堆栈中建议“可能重复”的所有问题,我已经尝试过,但这不是我想要的,这就是为什么我用所有解释来问这个问题我需要。现有问题仅在单击 TexttView 时更改颜色 我在LinearLayout 中有两个 TextView,我只想在单击它时更改文本的颜色,使用此代码我可以更改颜色,但是当我释放单击时,颜色会变回原来的颜色。我想要的是在我单击 TextView 时更改颜色,并且更改应该是永久性的,直到未单击另一个视图 请任何帮助将不胜感激

【问题讨论】:

标签: android textview


【解决方案1】:

您可以利用 Enum 类轻松定义所需的颜色,这样您就可以增加支持的颜色数量,而无需对代码进行太多更改。

枚举类

public enum ColorFactory {

    BLACK(R.id.textView1, R.color.black),
    WHITE(R.id.textView2, R.color.white),
    BLUE(R.id.textView2, R.color.blue),
    RED(R.id.textView2, R.color.red),
    CYAN(R.id.textView2, R.color.cyan),
    GREEN(R.id.textView2, R.color.green),
    GREY(R.id.textView2, R.color.grey),
    YELLOW(R.id.textView2, R.color.yellow),
    PINK(R.id.textView2, R.color.pink),
    PURPLE(R.id.textView2, R.color.purple),
    BROWN(R.id.textView2, R.color.brown),
    CUSTOM(R.id.textView2, R.color.custom);

    int id;
    int color;

    ColorFactory(int id, int color) {
        this.id = id;
        this.color = color;
    }

    public int getId() {
        return id;
    }

    public int getColor() {
        return color;
    }


    public static int getColorById(int id) {
        for (ColorFactory currentEnumElement : values()) {
            if (currentEnumElement.getId() == id) {
                return currentEnumElement.getColor();
            }
        }
        return -1;
    }
}

您必须在colors.xml 文件中定义这些颜色,如下所示

颜色.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">#3F51B5</color>
    <color name="colorPrimaryDark">#303F9F</color>
    <color name="colorAccent">#FF4081</color>
    <color name="black">#000000</color>
    <color name="white">#ffffff</color>
    <color name="blue">#0000ff</color>
    <color name="red">#ff0000</color>
    <color name="cyan">#00f2ff</color>
    <color name="green">#00ff00</color>
    <color name="grey">#8b8378</color>
    <color name="yellow">#ffd700</color>
    <color name="pink">#e8a4a3</color>
    <color name="purple">#b72bef</color>
    <color name="brown">#a7823e</color>
    <color name="custom">#990000</color>
</resources>

到最后,使用它的代码......(简化)

代码

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

    TextView textView1;
    TextView textView2;
    .
    .
    .

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        textView1 = (TextView) findViewById(R.id.textView1);
        textView2 = . . . .
        .
        .
        .
        .

    }

    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.textView1:
                textView1.setTextColor(ColorFactory.getColorById(view.getId()));
                break;
            case R.id.textView2:
                .
                .
                .
        }
    }
}

它应该允许您通过点击来设置颜色。 注意:您也可以使用ButterKnife 绑定视图以提高代码的可读性等。 希望对您有所帮助。

【讨论】:

  • 这个答案教会了我一些新东西 :) 谢谢
【解决方案2】:

如果您想在单击时使 textview 颜色永久更改,并在单击另一个 textview 时恢复正常。你需要像这样设置java代码。

TextView home = (TextView) findViewById(R.id.home_text);
TextView another = (TextView) findViewById(R.id.another_text);
home.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            home.setTextColor(Color.GREEN);
            another.setTextColor(Color.BLACK);
        }
    });
another.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            home.setTextColor(Color.BLACK);
            another.setTextColor(Color.RED);
        }
    });

【讨论】:

  • 如果我有 16 个视图怎么办?代码长度会增加
  • 您可以制作 OnClickListener 类,这样您就无需再次编写代码并将其设置在您的按钮上
  • @Pokemon - 看看我的回答,它解决了要处理的多个(例如 16 个)文本视图
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-20
  • 1970-01-01
  • 2018-04-10
  • 2021-08-31
  • 1970-01-01
  • 1970-01-01
  • 2012-01-18
相关资源
最近更新 更多