android 使用主题,自定义主题

本文详述了Android应用中使用主题与样式的全过程,包括如何在manifest文件中及程序内部设置主题,如何创建自定义样式和主题,并展示了如何在布局XML文件中引用这些资源。同时介绍了主题与样式的基本概念,以及如何利用它们实现应用的一致性格式化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      开发android也这么久了 ,对使用主题这样的简单事情再也没必要去查看文档,刚看到对使用主题,觉得写的很好,很全,很到位,建议不是很熟悉的朋友看看

转载 :http://eshock.blogbus.com/logs/60758767.html

使用主题
Styles 样式
Themes 主题 
Set the theme in the manifest 在manifest文件中设置主题
Set the theme from the application 在程序中设置主题
 

在设计应用程序时, 你可以使用样式和主题来对不同的屏幕和UI 元素进行统一的格式化.

样式是一组格式化属性, 你可以将它作为一个整体作用于布局xml文件中的一个单独的元素. 例如, 你可以定义一个指定某种文字大小和颜色的样式, 然后将它施加于某种类型的View元素.
主题是一组格式化属性, 你可以将它作为一个整体,作用于你的应用程序中的所有activity, 或者某个单独的activity. 例如, 你可以定义一个主题, 指定窗口框和面板的颜色, 菜单的字体和颜色, 然后把它作用于你的程序中的activity.
样式和主题都是资源. android提供了一些默认的样式和主题资源, 你也可以定义你自己的主题和样式资源.

创建样式和主题的步骤如下:

创建一个名为styles.xml的文件在你的程序的res/values目录下. 增加一个根<resources>节点.
对每一种样式或主题, 增加一个<style>元素, 该元素有一个唯一的名字, 有一个可选的parent属性. 名字用于引用这些样式, 而parent属性指定它们继承什么样式资源.
在<style> 元素中, 使用<item>元素定义格式属性. 每个<item>使用名字属性来指定属性, 并在该元素中定义该属性的值.
可以从其它xml资源, manifest或者应用程序代码中引用这些资源.
Styles 样式
这里是一个样式的例子:


--------------------------------------------------------------------------------
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="SpecialText" parent="@style/Text">
        <item name="android:textSize">18sp</item>
        <item name="android:textColor">#008</item>
    </style>
</resources> 
--------------------------------------------------------------------------------

如上所示, 你可以使用<item>元素来设定特定的格式属性. item中的name属性可以指示一个标准的字符串, 一个16进制颜色, 或者引用其它的资源类型.

注意到<style>元素中的parent属性. 该属性让你指定一个资源, 你的当前样式继承于该资源. 样式可以继承任何包含你想要的样式的资源. 一般来说, 你的样式应该总是继承于一个标准的android样式资源. 这样, 你只需要定义你想要改变的部分就可以了.

这里是如何在xml布局中使用样式:


--------------------------------------------------------------------------------
<EditText id="@+id/text1"
          style="@style/SpecialText"
          android:layout_width="fill_parent"
          android:layout_height="wrap_content"
          android:text="Hello, World!" /> 
--------------------------------------------------------------------------------

现在这个EditText widget 将被使用之前定义的样式.

Themes 主题
就像样式一样, 主题也是使用xml <style>元素来定义的, 而且也是使用相同方式来引用的. 不同之处是你将一个主题添加到整个程序或者activity, 通过manifest中的<application>和<activity>元素. 主题不能作用于单独的View.

这里是一个主题的例子:


--------------------------------------------------------------------------------
<?xml version="1.0" encoding="utf-8"?>
<resources>
  <style name="CustomTheme">        
    <item name="android:windowNoTitle">true</item>
    <item name="windowFrame">@drawable/screen_frame</item>
    <item name="windowBackground">@drawable/screen_background_white</item>
    <item name="panelForegroundColor">#FF000000</item>
    <item name="panelBackgroundColor">#FFFFFFFF</item>
    <item name="panelTextColor">?panelForegroundColor</item>
    <item name="panelTextSize">14</item>
    <item name="menuItemTextColor">?panelTextColor</item>
    <item name="menuItemTextSize">?panelTextSize</item>
  </style>
</resources> 
--------------------------------------------------------------------------------

注意@和?符号的用法. "@"表示我们在引用一个其它地方定义的资源(可能是在这个工程内, 也可能是android框架定义的). "?"表示我们在引用一个资源值, 这个值在当前加载的主题中. 这是通过查找一个<item>来实现的.(例如?panelTextColor查找name="panelTextColor" 的item.)

Set the theme in the manifest 在manifest文件中设置主题
如果要给一个应用程序中给所有的activity设定一个主题, 编辑AndroidManifest文件:

<application android:theme="@style/CustomTheme"> 
如果要给某个activity设定一个主题, 将上面的application改为activity即可.

有一些你不必定义就可以直接用的主题. 例如Dialog主题让你的activity像一个对话框:

<activity android:theme="@android:style/Theme.Dialog"> 
如果你喜欢某个主题, 但希望能调整一些地方, 那么就将该主题设为你的自定主题的parent.例如, 我们希望调整Theme.Dialog主题:

<style name="CustomDialogTheme" parent="@android:style/Theme.Dialog"> 
Set the theme from the application 在程序中设置主题
你也可以在程序中使用setTheme()方法加载一个主题. 主题, 你必须首先设置主题, 然后才能初始化View对象, 例如, 在调用 setContentView(View) 或者 inflate(int, ViewGroup)之前. 这样才能保证你对你所有的UI屏幕使用了同样的主题. 例如:


--------------------------------------------------------------------------------
 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ...
    setTheme(android.R.style.Theme_Light);
    setContentView(R.layout.linear_layout_3);
} 
--------------------------------------------------------------------------------

如果你希望在程序中加载一个主题, 注意该主题不会在系统启动activity的动画中加载, 因为这个动画是在你的程序启动之前发生的. 大部分情况下, 在xml里面设置主题是一个更好的方法.

关于自定义样式和主题以及在程序中引用它们的详细信息参见 Available Resource Types: Style and Themes.

关于可用的默认主题和样式参见 R.style.


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值