我想用样式更改颜色文本,

时间:2017-08-02 05:06:58

标签: android textview

这是我的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"/>

这是我在drawable文件夹中的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>

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

2 个答案:

答案 0 :(得分:0)

如果要在单击时永久更改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);
        }
    });

答案 1 :(得分:0)

您可以使用Enum类轻松定义所需的颜色,这样,您就可以在不需要对代码进行太多更改的情况下增加支持的颜色数量。

Enum class

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文件中定义这些颜色,如下所示

Colors.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绑定视图以提高代码的可读性等等。 希望它有所帮助。