这是我的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时更改颜色,并且更改应该是永久性的,直到没有单击另一个视图
如有任何帮助,将不胜感激
答案 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类轻松定义所需的颜色,这样,您就可以在不需要对代码进行太多更改的情况下增加支持的颜色数量。
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 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绑定视图以提高代码的可读性等等。 希望它有所帮助。