Dan*_*son 27 android colors onclick hyperlink textview
我有一个可点击的TextView,我想给它一些颜色.但我不知道怎么做.以下是我正在处理的两个文件中的相关代码片段:
TextView title = new TextView(this);
title.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
title.setTextColor(R.color.textcolor);
title.setText(titleLine);
title.setTypeface(null, Typeface.BOLD);
title.setClickable(true);
title.setId(idLine);
title.setFocusable(true);
title.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
/* Irrelevant code */
}
});
Run Code Online (Sandbox Code Playgroud)
这是我的textcolor.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:color="#000000"/> <!-- pressed -->
<item android:state_focused="true"
android:color="#000000"/> <!-- focused -->
<item android:color="#000000"/> <!-- default -->
</selector>
Run Code Online (Sandbox Code Playgroud)
当我通过键入title.setTextColor(R.color.textcolor)使用textcolor文件时; ,无论我是否按下它,文字颜色都会变成灰色.这很奇怪,因为我在所有颜色字段中都写了"#000000".
但是如果我删除了setTextColor代码,则将textView变为浅灰色,当我按下它时,它变为黑色.但那不是我想要的颜色.
那么,任何人都可以帮我解决这个问题吗?
只是为了澄清:我希望能够在文本正常,按下和聚焦时指定文本的颜色.
Kon*_*rov 62
如果要从代码中设置有状态颜色,则需要ColorStateList作为参数setTextColor传入以将int传递给方法,从而将颜色设置为所有状态.看起来你的xml也不完全正确.来自ColorStateListdocs的示例看起来像(应该像这样定位:) res/color/selector_txt.xml:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="true" android:color="@color/testcolor1"/>
<item android:state_pressed="true" android:state_enabled="false" android:color="@color/testcolor2" />
<item android:state_enabled="false" android:color="@color/testcolor3" />
<item android:color="@color/testcolor5"/>
</selector>
Run Code Online (Sandbox Code Playgroud)
关于如何设置ColorStateList文本颜色的UPD :
ColorStateList cl = null;
try {
XmlResourceParser xpp = getResources().getXml(R.color.selector_txt);
cl = ColorStateList.createFromXml(getResources(), xpp);
} catch (Exception e) {}
Run Code Online (Sandbox Code Playgroud)
注意:该方法createFromXml(Resources, XmlPullParser parser)在API级别23中已弃用.使用createFromXml(Resources, XmlPullParser parser, Theme)
使用XML,它很简单:
android:textColor="@color/selector_txt"
Run Code Online (Sandbox Code Playgroud)
小智 42
第1步:像这样在xml中设置文本颜色
机器人:文字颜色= "@颜色/ text_color"
第2 步:创建res/color/text_color.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_pressed="true"
android:color="#ffffffff"/> <!-- pressed -->
<item android:state_focused="true"
android:color="#ff0000ff"/> <!-- focused -->
<item android:color="#ff000000"/> <!--default -->
</selector>
Run Code Online (Sandbox Code Playgroud)
Mah*_*iya 17
尝试这个..它对我有用:
文件名:res/color/bg_tab_text_color.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="false" android:state_selected="false" android:color="@color/tab_unselected_text_color"/>
<item android:state_pressed="true" android:color="@color/tab_selected_text_color"/>
<item android:state_pressed="false" android:state_selected="true" android:color="@color/tab_selected_text_color"/>
<item android:color="@color/tab_unselected_text_color"></item>
</selector>
Run Code Online (Sandbox Code Playgroud)
尝试将xml布局中的颜色设置为:
android:textColor="@color/bg_tab_text_color"
Run Code Online (Sandbox Code Playgroud)
zir*_*ael 10
查看R.java类(它是自动生成的).你有类似的东西:
public static final class color {
public static final int gray_transparent=0x7f050001;
}
Run Code Online (Sandbox Code Playgroud)
所以在你的代码中:
title.setTextColor(R.color.textcolor);
Run Code Online (Sandbox Code Playgroud)
您不是从textcolor.xml设置值,而是从R.java设置值(包含textcolor.xml地址).设置颜色的有效方法是:
title.setTextColor(getResources().getColorStateList(R.color.textcolor));
Run Code Online (Sandbox Code Playgroud)
这是一种非常简单的编程方式:
private void setColorStateList(TextView view) {
int[][] states = new int[][] {
new int[] { android.R.attr.state_pressed}, // pressed
new int[] { android.R.attr.state_focused}, // focused
new int[] { android.R.attr.state_enabled} // enabled
};
int[] colors = new int[] {
getResources().getColor(R.color.blue),
getResources().getColor(R.color.green),
getResources().getColor(R.color.green)
};
ColorStateList list = new ColorStateList(states, colors);
view.setTextColor(list);
view.setClickable(true);
view.setFocusableInTouchMode(true);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
85296 次 |
| 最近记录: |