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

来源:互联网 发布:安顺行知高中地址 编辑:程序博客网 时间:2024/06/05 00:35

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 0