• 样式(Style)和主题(Theme)资源——样式资源


            样式和主题资源都是用于对Android应用进行“美化”的,只要充分利用Android应用的样式和主题资源,开发者可以开发出各种风格的Android应用。

            样式资源:

            如果我们经常需要对某个类型的组件指定大致相似的格式,比如字体、颜色、背景色等,如果每次都要为View组件重复指定这些属性,无疑会有大量的工作量,而且不利于项目后期的维护。

            类似于World、World也提供了样式来管理格式:一个样式等于一组格式的集合,如果设定某段文本使用某个样式,那么该样式的所有格式都会整体应用于这段文本。Android的样式与此类似,Android样式也包含一组格式,为一个组件设置某个样式时,该样式所包含的全部格式将会应用于该组件。

             提示:一个样式相当于多个格式的集合,其他UI组件通过style属性来指定样式,这就相当于把该样式包含的所有格式同时应用于该UI组件。

             Android的样式资源文件也放在/res/values 目录下,样式资源文件的根元素是<resources.../>元素,该元素内可包含多个<style.../>子元素,每个<style.../>元素定义一个样式。<style.../>元素指定如下两个属性。

    • name:指定样式的名称。
    • parent:指定该样式所继承的父样式。当继承某个父样式时,该样式将会获得父样式中定义的全部样式。当然,当前样式也可覆盖父样式中指定的格式。

          <style.../>元素内包含多个<item.../>子元素,每个<item.../>子元素定义一个格式项。

           例如为应用定义如下样式文件。

          程序清单: esvaluesmy_style.xml

          

    <?xml version="1.0" encoding="utf-8"?>
    <resources xmlns:android="http://schemas.android.com/apk/res/android">
        <!-- 定义一个样式,指定字体大小、字体颜色 -->
       <style name="style1">
           <item name="android:textSize">20sp</item>
           <item name="android:textColor">#00d</item>
       </style>
       <!-- 定义一个 样式,继承前一个样式-->
       <style name="style2" parent="@style/style1" >
           <item name="android:background">#ee6</item>
           <item name="android:padding">8dp</item>
           <!-- 覆盖样式中指定的属性 -->
           <item name="android:textColor" >#000</item>
       </style>
    </resources>

    上面的样式资源只能怪定义了两个样式,其中第二个样式继承了第一个样式,而且第二个样式中的textColor属性覆盖了父样式中的textColor属性。

        一旦定义了上面的样式资源之后,接下来就可以在XML资源中按如下语法格式来使用样式了:

         @[<package_name>:]style/file_name

         下面是该示例中的界面布局文件,该布局文件中包含两个文本框,这两个文本框分别使用两个样式。

         

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical"
       >
      <!-- 指定使用style1的样式 -->
      <EditText android:layout_width="fill_parent"
          android:layout_height="wrap_content"
          android:text="样式1的格式"
          style="@style/style1"/>
       <!-- 指定使用style2的样式 -->
       <EditText android:layout_width="fill_parent"
           android:layout_height="wrap_content"
           android:text="样式2的格式"
           style="@style/style2"/>
    </LinearLayout>

        上面的界面布局文件中并未为两个文本框指定任何格式,只是为它们分别指定了使用style1、style2的样式,这两个样式包含的格式就会应用到这两个文本框。运行上面的程序,将看到如图6.10所示的界面。

         

       

  • 相关阅读:
    Delphi中多标签页面的实现
    选择排序
    关于Delphi中TRttiContext.FindType失效的问题
    Delphi中拖动无边框窗口的5种方法
    集中精力做最有价值的事情,而不必把主要精力都浪费在自我包装上(例如学位,头衔,自吹自擂)——沉痛反思:我以前还真是这样
    QModelIndex有internalPointer()函数,可以存任何数据,另有QAbstractItemModel::createIndex来创造节点
    沉没成本——无法收回的成本,但不要影响下一次决策
    使用HttpURLConnection实现多线程下载
    Delphi6/7 中XML 文档的应用
    delphiXE调用Objective-c库
  • 原文地址:https://www.cnblogs.com/wolipengbo/p/3439803.html
Copyright © 2020-2023  润新知