样式是一套能够应用于视图组件的属性.
例如:
<style name="tv_style_red">
<item name="android:gravity">center</item>
<item name="android:textSize">15sp</item>
<item name="android:textColor">@color/red</item>
</style>
只要有这些属性的控件都可以这样使用:
<TextView
android:textIsSelectable="true"
android:id="@+id/tv_orderType"
android:layout_alignParentLeft="true"
style="@style/tv_style_red"
android:layout_width="wrap_content"
android:layout_height="match_parent" />
样式继承
样式支持继承。一个样式能继承并覆盖其他样式的属性。
1.命名继承 要以主题名的形式指定父主题有继承关系的两个主题都应处于同一个
<style name="tv_style_red">
<item name="android:gravity">center</item>
<item name="android:textSize">15sp</item>
<item name="android:textColor">@color/red</item>
</style>
//覆盖textSize的值
<style name="tv_style_red.textSize12">
<item name="android:textSize">12sp</item>
</style>
2.parent的指定 库要跨库继承,就一定要明确使用parent属性
<style name="tv_style_red_textSize12" parent="tv_style_red">
<item name="android:textSize">12sp</item>
</style>
<Button xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/list_item_sound_button"
android:layout_width="match_parent"
android:layout_height="120dp"
android:background="?attr/colorAccent"
tools:text="Sound name"/>
上述XML中?符号的意思是使用colorAccent属性指向的资源。这里,是指定义在colors.xml
文件中的灰色
也可以在代码中使用主题属性:
Resources.Theme theme = getActivity().getTheme();
int[] attrsToFetch = { R.attr.colorAccent };
TypedArray a = theme.obtainStyledAttributes(R.style.AppTheme, attrsToFetch);
int accentColor = a.getInt(0, 0);
a.recycle();