我需要将主题背景颜色应用于TextView背景颜色。如果在此处描述过程位,则此文本字段用于为用户选择字体颜色。目前它是透明的。这是我到目前为止所尝试的:
TypedValue typedValue=new TypedValue();
getTheme().resolveAttribute(android.R.attr.windowBackground, typedValue, true);
if(typedValue.type >= TypedValue.TYPE_FIRST_COLOR_INT && typedValue.type <= TypedValue.TYPE_LAST_COLOR_INT){
backgroundColor=typedValue.data;
fontColorText=(TextView) findViewById(R.id.textValue);
fontColorText.setBackgroundColor(backgroundColor);
}
但这不适合我。
有人可以建议我如何动态获取主题颜色吗?
答案 0 :(得分:0)
我发现这篇文章正在寻找解决同一问题的方法。你的问题帮助我得出了这个答案:
TypedValue themeBackgroundColor = new TypedValue();
int backgroundColor;
if (getActivity().getTheme().resolveAttribute(android.R.attr.colorBackground,
themeBackgroundColor, true)) {
switch (themeBackgroundColor.type) {
case TypedValue.TYPE_INT_COLOR_ARGB4:
backgroundColor = Color.argb(
(themeBackgroundColor.data & 0xf000) >> 8,
(themeBackgroundColor.data & 0xf00) >> 4,
themeBackgroundColor.data & 0xf0,
(themeBackgroundColor.data & 0xf) << 4);
break;
case TypedValue.TYPE_INT_COLOR_RGB4:
backgroundColor = Color.rgb(
(themeBackgroundColor.data & 0xf00) >> 4,
themeBackgroundColor.data & 0xf0,
(themeBackgroundColor.data & 0xf) << 4);
break;
case TypedValue.TYPE_INT_COLOR_ARGB8:
backgroundColor = themeBackgroundColor.data;
break;
case TypedValue.TYPE_INT_COLOR_RGB8:
backgroundColor = Color.rgb(
(themeBackgroundColor.data & 0xff0000) >> 16,
(themeBackgroundColor.data & 0xff00) >> 8,
themeBackgroundColor.data & 0xff);
break;
default:
throw new RuntimeException("ClassName: couldn't parse theme " +
"background color attribute " + themeBackgroundColor.toString());
}
} else {
throw new RuntimeException("ClassName: couldn't find background color in " +
"theme");
}
我确认colorBackground
是Material,Holo和pre-Holo主题中的指定属性。此外,由于似乎不保证主题的背景是以AARRGGBB格式指定的,因此我输入了switch语句来处理所有有效格式。我已经检查了所有颜色的情况。希望它有所帮助。
答案 1 :(得分:-1)
<强> MainActivity.java:强>
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView t1 = (TextView)findViewById(R.id.text);
Spannable s1 = new SpannableString("These is the Way we can change the background textView");
s1.setSpan(new ForegroundColorSpan(Color.BLUE), 1, 25, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
t1.setText(s1);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
<强> activity_main.xml中:强>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="58dp"
android:layout_marginTop="57dp"
android:text="TextView" />
<强>输出:强>