zoukankan      html  css  js  c++  java
  • 样式(Style)和主题(Theme)资源——主题资源

          与样式资源非常相似,主题资源的XML文件通常也放在/res/values 目录下,主题资源的XML文档同样以<resources.../>元素作为根元素,同样使用<style.../>元素来定义主题。

          主题与样式的区别主要体现在:

    • 主题不能作用于单个的View组件,主体应该对整个应用的所有Activity起作用,或对指定的Activity起作用。
    • 主题定义的格式应该是改变窗口外观的格式,例如窗口标题、窗口边框等。

         实例:给所有窗口添加边框、背景      

         下面通过一个示例来介绍主题的用法。为了给所有的窗口都添加边框、背景,先在/res/values/my_new_style.xml文件中增加一个主题,定义主体的<style.../>片段如下:

         

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
       <style name="CrazyTheme">
           <item name="android:windowNoTitle">true</item>
           <item name="android:windowFullscreen">true</item>
           <item name="android:windowFrame">@drawable/window_border</item>
            <item name="android:windowBackground">@drawable/star</item>
       </style>
    </resources>

    上面的主题定义中使用了两个Drawable资源,其中@drawable/star是一张图片;@drawable/window_border是一个ShapeDrawable资源,该资源对应的XML文件代码如下:

      esdrawable_mdpiwndow_border.xml

    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="rectangle" >
        <!-- 设置填充颜色 -->
        <solid android:color="#0fff"/>
        <!-- 设置四周的内边距 -->
        <padding android:left="7dp"
            android:top="7dp"
            android:right="7dp"
            android:bottom="7dp"/>
        <!-- 设置边框 -->
        <stroke android:width="10dip" android:color="#f00"/>
    </shape>

    定义了上面主题之后,接下来即可在Java代码中使用该资源,例如如下代码:

    package com.example.studyresources;
    
    import android.os.Bundle;
    import android.app.Activity;
    import android.view.Menu;
    
    public class StyleResTest extends Activity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
           setTheme(R.style.CrazyTheme);
                    setContentView(R.layout.activity_style_res_test);
        }
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.style_res_test, menu);
            return true;
        }
    
    }

     大部分时候,在AndroidManifest.xml文件中对指定应用、指定Activity应用主题更加简单。如果我们想让应用中全部窗口使用该主题,只要为<application.../>元素增加android:theme属性。属性是一个主题的名字,如以下代码所示:

      

    <application android:theme="@style/CrazyitTheme">
    ...
    </application>

      如果你只想让程序中的某个Activity拥有这个主题,那么你可以修改<activity.../>元素,同样通过android:theme指定主题即可。
      本应用在代码中指定使用的样式,运行可看到如图6.11所示的界面。

     

     从图6.11所示的效果可以看出,该窗口没有标题,窗口背景也被改变了,窗口全屏显示......这些都是自定义主题控制的。

         Android中提供了几种内置的主题资源,这些主题通过查询Android.R.style类可以看到。

         例如前面介绍的对话框风格的窗口,我们只要采用如下代码来定义某个Activity即可。

        

    <application android:theme="@android:style/Theme.Dialog">
    ...
    </application>

      与样式类似的是,Android主题同样支持继承。如果开发过程中还想利用某个主题,但需要对它们进行布局修改,则可通过继承系统主题来实现自定义主题。例如如下代码片段:
       

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

    上面定义的CrazyTheme主题继承了android.R.style.Theme.Dialog主题,那么接下来在该<style.../>元素中添加<item.../>子元素就可覆盖系统主题的部分属性了。

      

  • 相关阅读:
    信号量的简单使用
    [Unity 3D] Unity 3D 性能优化(二)
    Android 开机动画源码分析
    关于FTP操作的功能类
    ArcGIS Engine 改变线IPolyline的方向
    使用ORACLE SQL Tuning advisor快速优化低效的SQL语句
    Linux CPU 负载度量公式
    Java垃圾回收机制
    常用的shell命令整理
    UVa340
  • 原文地址:https://www.cnblogs.com/wolipengbo/p/3439858.html
Copyright © 2011-2022 走看看