Android的theme主题中统一定义各种控件的style属性

论坛 期权论坛 脚本     
已经匿名di用户   2022-5-29 19:22   2275   0

Android的theme主题中统一定义各种控件的style属性

Android中定义一个Buttonstyle样式,可以直接指明它的style属性即可。

但当我们的应用中所有的Button都需要使用统一的style样式时,这样做明显很麻烦,需要在每一个Button中声明style属性。

Android SDK的在线文档中有专门一章介绍如何定义和使用StyleTheme,但是没有具体给出如何自己定义包含各种默认配置的Theme,包含窗口风格,按钮风格,字体等。一般的做法是在使用某个控件时,给定属性值或者一个Style。这种方式的缺点是,每个控件都要定义,否则就会使用Android系统默认的Theme

参考Android系统默认的theme中对Buttonstyle设置,我们也可以在theme中统一自定义各种控件的style属性,然后再manifest.xml应用这一theme即可,而不需逐一对每个相同的控件指明style属性。

在一个activity中需要统一设置ButtonTextView等各个控件的属性时,我们可以按如下方法进行:

、在values/styles.xml中定义两个style如下:

<!-- style用于设置button的背景图片及颜色 -->

<!-- btn_select_pic btn_select_color都是StateListxml文件,当Button处于不同状态时显示不同的背景图,Button上的文本显示不同的颜色 -->

<style name="btnStyle">
<item name="android:background">@drawable/btn_select_pic</item>
<item name="android:textColor">@color/btn_select_color</item>
</style>

<!-- 设置textView的背景(黑色)及文本颜色(绿色) -->
<style name="textViewStyle">
<item name="android:background">#000000</item>
<item name="android:textColor">#00ff00</item>
</style>

、在values/styles.xml定义一个style如下:

<style name="myTheme">
<item name="android:buttonStyle">@style/btnStyle</item>
<item name="android:textViewStyle">@style/textViewStyle</item>
</style>

③、res/color/btn_select_color.xml文件的内容如下:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:color="#ff000000" android:state_pressed="false"/>
<item android:color="#ffffffff" android:state_pressed="true"/>
</selector>
res/drawable/btn_select_pic.xml内容如下:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:drawable="@drawable/btn_default_normal" android:state_pressed="false" android:state_enabled="true"/>
<item android:drawable="@drawable/btn_default_selected" android:state_pressed="true"/>
<item android:drawable="@drawable/btn_default_normal" />
</selector>

③、在manifest.xml文件中使用主题myTheme:该Acticvty界面上的所有ButtonTextView都将使用统一的style显示。

<activity android:name=".MainActivity" android:label="@string/app_name"

android:theme="@style/myTheme">

该activity对应的布局文件如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical"

android:gravity="center_vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent">

<Button android:id="@+id/BTN_ONE"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="center"

android:text="BTN_ONE" />

<Button android:id="@+id/toggle_title"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="center"

android:text="@string/toggle_title" />

<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="center"

android:text="@string/toggle_title" />

</LinearLayout>

运行效果图如下:Button未按下时,背景图为灰色,文本颜色为#000000,;当按钮按下时,背景图片为橘色,文本颜色为#ffffff

开发中常用的style属性如下:

<style name="Theme.Dialog.Light" parent="@android:style/Theme.Dialog">

<item name="android:buttonStyle">@style/Button.Light</item>

<item name="android:checkboxStyle">@style/CheckBox.Light</item>

<item name="android:gridViewStyle">@style/GridView.Light</item>

<item name="android:listViewStyle">@style/ListView.Light</item>

<item name="android:textViewStyle">@style/TextView.Light</item>

<item name="android:spinnerStyle">@style/Spinner.Light</item>

<item name="android:radioButtonStyle">@style/RadioButton.Light</item>

<item name="android:editTextStyle">@style/EditText.Light</item>

<item name="android:autoCompleteTextViewStyle">@style/AutoCompleteTextView.Light</item>

<item name="android:progressBarStyle">@style/ProgressBar.Light</item>

<item name="android:spinnerDropDownItemStyle">@style/SpinnerDropDownItem.Light</item>

<item name="android:windowBackground">@android:color/transparent</item>

<item name="android:scrollbarThumbHorizontal">@drawable/scrollbar_horizontal</item>

<item name="android:scrollbarThumbVertical">@drawable/scrollbar_vertical</item>

<item name="android:progressBarStyleHorizontal">@style/ProgressBar.Horizontal.Light</item>

<item name="android:windowTitleStyle">@null</item>

<item name="android:windowIsFloating">true</item>

<item name="android:windowContentOverlay">@null</item>

<item name="android:windowNoTitle">true</item>

<item name="android:windowFrame">@null</item>

<item name="android:colorBackgroundCacheHint">@null</item>

<!-- others -->

</style>

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:81
帖子:4969
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP