Android主题Theme style

QuibblerQuibbler 2020-02-22 约 14 分钟 1753 次阅读

Android主题Theme探究


Android预先定义了很多主题,我们也可以在values/styles.xml文件中自定义主题。



1、三个颜色

新建一个工程AndroidStudio会在styles.xml中帮我们定义一个默认AppTheme,其中有三个颜色值colorPrimary、colorPrimaryDark、colorAccent,含义如下:

<!-- 应用的主要色调,actionBar默认使用该颜色,Toolbar导航栏的底色 -->
    <item name="colorPrimary">@color/white</item>
    
    <!-- 应用的主要暗色调,statusBarColor 默认使用该颜色 -->
    <item name="colorPrimaryDark">@color/white</item>
    
    <!-- 一般控件的选中效果默认采用该颜色,如 CheckBox,RadioButton,SwitchCompat,ProcessBar等-->
    <item name="colorAccent">@color/colorAccent</item>

2、常用属性:

        状态栏、顶部导航栏相关:

<!-- status bar color -->
    <item name="android:statusBarColor">#00000000</item>
    
    <!-- activity 是否能在status bar 底部绘制 -->
    <item name="android:windowOverscan">true</item>
    
    <!-- 让status bar透明,相当于statusBarColor=transparent + windowOverscan=true -->
    <item name="android:windowTranslucentStatus">true</item>
    
    <!-- 改变status bar 文字颜色, true黑色, false白色,API23可用-->
    <item name="android:windowLightStatusBar">true</item>
    
    <!-- 全屏显示,隐藏状态栏、导航栏、底部导航栏 -->
    <item name="android:windowFullscreen">true</item>
    
    <!-- hide title bar -->
    <item name="windowNoTitle">true</item>
    
    <!-- 底部虚拟导航栏颜色 -->
    <item name="android:navigationBarColor">#E91E63</item>
    
    <!-- 让底部导航栏变半透明灰色,覆盖在Activity之上(默认false,activity会居于底部导航栏顶部),如果设为true,navigationBarColor 失效 -->
    <item name="android:windowTranslucentNavigation">true</item>

        WindowBackground背景主题:

<!-- WindowBackground,可以设置@drawable,颜色引用(@color),不能设置颜色值(#fffffff),
    Window区域说明:Window涵盖整个屏幕显示区域,包括StatusBar的区域。当windowOverscan=false时,
    window的区域比Activity多出StatusBar,当windowOverscan=true时,window区域与Activity相同-->
    <item name="android:windowBackground">@drawable/ic_launcher_background</item>
    
    <item name="android:windowBackground">@color/light_purple</item>

        控件相关通用主题设置:

<!-- button 文字是否全部大写(系统默认开)-->
    <item name="android:textAllCaps">false</item>
    
    <!-- 默认 Button,TextView的文字颜色 -->
    <item name="android:textColor">#B0C4DE</item>
    
    <!-- 默认 EditView 输入框字体的颜色 -->
    <item name="android:editTextColor">#E6E6FA</item>
    
    <!-- RadioButton checkbox等控件的文字 -->
    <item name="android:textColorPrimaryDisableOnly">#1C71A9</item>
    
    <!-- 应用的主要文字颜色,actionBar的标题文字默认使用该颜色 -->
    <item name="android:textColorPrimary">#FFFFFF</item>
    
    <!-- 辅助的文字颜色,一般比textColorPrimary的颜色弱一点,用于一些弱化的表示 -->
    <item name="android:textColorSecondary">#C1C1C1</item>
    
    <!-- 控件选中时的颜色,默认使用colorAccent -->
    <item name="android:colorControlActivated">#FF7F50</item>
    
    <!-- 控件按压时的色调-->
    <item name="android:colorControlHighlight">#FF00FF</item>
    
    <!-- CheckBox,RadioButton,SwitchCompat等默认状态的颜色 --
    <item name="android:colorControlNormal">#FFD700</item>
    
    <!-- 默认按钮的背景颜色 -->
    <item name="android:colorButtonNormal">#1C71A9</item>

        其它(无效设置)

<!-- 【无效】 在theme中设置Activity的属性无效, 请到AndroidManifest中Activity标签下设置 -->
    <item name="android:launchMode">singleTop</item>
    <item name="android:screenOrientation">landscape</item>

        


3、系统默认主题

        系统自带主题:

API 1:
    android:Theme 根主题
    android:Theme.Black 背景黑色
    android:Theme.Light 背景白色
    android:Theme.Wallpaper 以桌面墙纸为背景
    android:Theme.Translucent 透明背景
    android:Theme.Panel 平板风格
    android:Theme.Dialog 对话框风格

    API 11:
    android:Theme.Holo Holo根主题
    android:Theme.Holo.Black Holo黑主题
    android:Theme.Holo.Light Holo白主题

    API 14:
    Theme.DeviceDefault 设备默认根主题
    Theme.DeviceDefault.Black 设备默认黑主题
    Theme.DeviceDefault.Light 设备默认白主题

    API 21: (网上常说的 Android Material Design 就是要用这种主题)
    Theme.Material Material根主题
    Theme.Material.Light Material白主题

        兼容包v7中带的主题(常用):

Theme.AppCompat 兼容主题的根主题
    Theme.AppCompat.Black 兼容主题的黑色主题
    Theme.AppCompat.Light 兼容主题的白色主题

系统自带的主题已经很丰富了,但是我们还是希望自己的APP独特多彩,可以继承已有的Theme,在values/styles.xml自定义主题。

<!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        
    </style>

4、 全局样式

可以单独给控件设置一个style样式:

<Button
       style="@style/Widget.AppCompat.Button.Borderless"
       ... />

或者给ProgressBar设置水平样式,默认是转圈圈

<ProgressBar
        style="@style/Widget.AppCompat.ProgressBar.Horizontal"
        ... />

在styles.xml中定义一个通用的style样式,设置本应用中的全部Button控件的样式:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="buttonStyle">@style/Widget.AppCompat.Button.Borderless</item>
        ...
    </style>

学习资料:

         Styles and Themes

        《Android Theme 属性详解》

        @android, ?attr/ 和 ?android 的区别

相关推荐

精选
ViewPager和PagerAdapter、FragmentPagerAdapter、FragmentStatePager
Android

ViewPager和PagerAdapter、FragmentPagerAdapter、FragmentStatePager

ViewPager1、ViewPagerandroidx.viewpager.widget.ViewPager,Android中使用非常广泛的控件,可以说是APP必备:首次打开引导页、页面Banner广告等。常用方法:setAdapter() 设置适配器setOffscreenPageLimit() 设置缓存的页面个数,默认是 1setCurrentItem() 跳转到特定的页面setOnPage

1.1k
获取Android内置WebView内核版本
Android

获取Android内置WebView内核版本

获取Android内置WebView内核版本竟然能遇到这样奇葩的事情,网页用的技术过于新颖,以至于只支持高版本Chromium内核的,低版本安卓系统中内置的内核版本较低,无法加载前端页面。1、设置查看在系统设置里 > 应用 > 应用管理 > 显示系统应用,查看WebView组件:2、页面查看通过WebView发起的网络请求,都会带上浏览器的UA,通常页面都可以通过UA判断浏览器的内核版本。这里有两

1.1w
Android 14适配总结
Android

Android 14适配总结

Android 14适配总结毕业工作至今已经适配了三个Android大版本,从Android 11到Android 12、再到Android 13。2023年,Google即将推出的Android 14,上半年已经开始第一批适配。现在,第四个Android版本已经适配完,总结记录一下。1、Android 14计划Google一般会在2月份对外发布预告,同时放出开发者预览版。“拉通”各大平台、厂商以

1.1w

评论 (1)

评论功能已关闭,仅展示历史评论
Quibbler
Quibbler

状态栏文字颜色:黑/白


        应用设置状态栏颜色非常重要,一般状态栏色默认为在styles.xml中设置的colorPrimaryDark属性:

    <item name="colorPrimaryDark">@android:color/holo_red_dark</item>

        但是往往不够好看,除非设计师调色的非常好

        可以设置为状态栏背景色透明:

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

        但是这样状态栏中的文字就看不清的,看各个系统而异,有的默认状态栏颜色为白色这时候就显示不清楚:

        这时候就需要增加另一个控制状态栏文字颜色的属性windowLightStatusBar:改变状态栏文字颜色, true黑色, false白色,API23可用

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

        看,这样应用的状态栏就完美了。