Android自定义主题样式详解(结合自定义title栏讲解)

此篇博客将总结主题样式的自定义并且结合实例自定义title栏进行讲解。为了方便阅读,在此先写明文章结构:

1.对android主题样式的理解 (简略结合系统自带样式的讲解)

2.如何自定义主题样式 (主要,有例子)

3.如何自定义title栏(例子)


一、对android主题样式的理解

1.首先要先理解android app的各个部分的名称、概念。如下图
这里写图片描述

这个就是app的各个部分的名称,一会的自定义主题样式的item设置就与他们有关啦!


2.对大体主题样式的说明:

(这里的双括号本来是单括号来的,可是涉及到Markdown语法,会缺失文字,所以用一边双括号代替)
1.在res/values 目录下新建一个名叫style.xml的文件。增加一个<resources>根节点。
2.对每一个风格和主题,给《style>element增加一个全局唯一的名字,也可以选择增加一个父类属性。在后边我们可以用这个名字来应用风格,而父类属性标识了当前风格是继承于哪个风格。
3.在《style>元素内部,申明一个或者多个《item>,每一个《item>定义了一个名字属性,并且在元素内部定义了这个风格的值。
4.你可以应用在其他XML定义的资源。


3.进而要举例说明(用系统的新建工程举例)

这里写图片描述
首先我们知道系统新建的工程是activity是继承AppCompatActivity的(注意这里,继承这个activity,那就只能用它的子类样式了喔),然后通过查看AndroidManifest知道,我们可以去styles.xml查看这个activity的主题,代码如下:
   <style name="AppBaseTheme" 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>

我们对着本文第一张来看,colorPrimary是我们所谓的title栏,colorPrimaryDark是系统栏,colorAccent就是如图了(只能意会了)。而且,我们要注意这个主题的继承,继承的是AppCompat的子类主题,想起我们刚刚系统自带的activity也是继承这个父类activity就知道,我们的mainactivity不能使用这个AppCompat父类activity以外的主题了喔。


二、自定义主题样式

1.先给个例子看看

第一张


这里写图片描述

第二张


这里写图片描述

第三张


这里写图片描述

可以很明显滴看到这三个主题是不同的。
第一个的代码是:

 <style name="WindowTitleBackground" >
        <item name="android:background">@color/title_blue</item>
    </style>
  <style name="MyTheme" parent="android:Theme">
        <item name="android:windowTitleSize">50dp</item>
        <item name="android:windowTitleBackgroundStyle">@style/WindowTitleBackground</item>
 </style>

可以看到继承的一个主题是为了设置系统栏和标题栏(windowTitleBackgroundStyle,而且win也可以看到我们设置了主题的高度50dp)的样式的。


第二个的代码是:

<style name="WindowTitleBackground" >
        <item name="android:background">@color/title_blue</item>
    </style>
 <style name="MyTheme" parent="android:Theme">
        <item name="android:windowTitleSize">50dp</item>
        <item name="android:windowTitleBackgroundStyle">@style/WindowTitleBackground</item>
        <item name="android:windowBackground">@color/white</item>
  </style>

可以看到我设置了一个属性windowBackground,可以查看本文的第一张图,就是那来变成了白色。


第三个的代码是

<style name="WindowTitleBackground" >
        <item name="android:background">@color/title_blue</item>
    </style>
 <style name="MyTheme" parent="android:Theme">
        <item name="android:windowTitleSize">50dp</item>
        <item name="android:windowTitleBackgroundStyle">@style/WindowTitleBackground</item>
        <item name="android:background">@color/white</item>
 </style>

可以看我的设置多了一个item(理解:相当于布局中设置多了一个属性)
设置的item是background颜色白色,他会掩盖我们设置的系统栏和状态栏颜色的喔!!


2.对一些可以进行设置的item属性进行讲解(不过要注意继承是什么activity,如果是系统自带的AppCompat就有查文档了,如果想纯粹自定义就继承Activity,或者像我上面的例子那样,继承Theme)

!!!这些要像我上面那样,当成item属性进行添加带style里面喔!!!!
这些属性很明显的,一些设置的是true或者flase,一些是设置资源引用


android:theme="@android:style/Theme.Dialog" :Activity显示为对话框模式

android:theme="@android:style/Theme.NoTitleBar" :不显示应用程序标题栏

android:theme="@android:style/Theme.NoTitleBar.Fullscreen" :不显示应用程序标题栏,并全屏

android:theme="Theme.Light ": 背景为白色

android:theme="Theme.Light.NoTitleBar" :白色背景并无标题栏

android:theme="Theme.Light.NoTitleBar.Fullscreen" :白色背景,无标题栏,全屏

android:theme="Theme.Black" : 背景黑色

android:theme="Theme.Black.NoTitleBar" :黑色背景并无标题栏

android:theme="Theme.Black.NoTitleBar.Fullscreen" :黑色背景,无标题栏,全屏

android:theme="Theme.Wallpaper" : 用系统桌面为应用程序背景

android:theme="Theme.Wallpaper.NoTitleBar" :用系统桌面为应用程序背景,且无标题栏

android:theme="Theme.Wallpaper.NoTitleBar.Fullscreen" :用系统桌面为应用程序背景,无标题栏,全屏

android:theme="Theme.Translucent : 透明背景

android:theme="Theme.Translucent.NoTitleBar" :透明背景并无标题

android:theme="Theme.Translucent.NoTitleBar.Fullscreen" :透明背景并无标题,全屏

android:theme="Theme.Panel ": 面板风格显示

android:theme="Theme.Light.Panel" : 平板风格显示

三、自定义title栏

1.先查看本身activity继承的什么父类activity

2.自定义style样式

3.编写标题栏的布局

4.代码引用(一个是在mainactivity引用,一个是在AndroidManifest文件的修改)

举例!!!!

1.我的mainactivity关键代码:

public class MainActivity extends Activity implements android.view.View.OnClickListener 

继承的是activity

2.自定义title样式

   <style name="WindowTitleBackground">
        <item name="android:background">@color/title_blue</item>
    </style>

    <style name="MyTheme" parent="android:Theme">
        <item name="android:windowTitleSize">50dp</item>
        <item name="android:windowTitleBackgroundStyle">@style/WindowTitleBackground</item>
        <item name="android:windowBackground">@color/white</item>
    </style>

3.title栏的布局(可以看到使用的菜单图标跟系统的不一样!!)

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >

    <LinearLayout
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:layout_alignParentRight="true"
        android:orientation="vertical">
        <TextView
            android:layout_width="10dp"
            android:layout_height="8dp" />
        <ImageView
            android:layout_width="40dp"
            android:layout_height="30dp"
            android:background="@drawable/menu"/>


    </LinearLayout>

</RelativeLayout>

4.代码的引用

(1)在AndroidManifest里面的修改

 <activity android:name=".activity.MainActivity" android:theme="@style/MyTheme">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

可以看到activity引用的主题是我刚刚自定义的
(2)在activity里面的引用

     requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);//自定义标题,去掉系统的标题栏
        setContentView(R.layout.activity_main);
        getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.title);//设置标题为某个layout

好了。希望大家仔细阅读看完我的这个总结后,对自定义主题和title栏样式等等都有自己的感悟!!!有问题请指出,一起学习!!!

转载请注明:【JackFrost的博客】

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,298评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,701评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,078评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,687评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,018评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,410评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,729评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,412评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,124评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,379评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,903评论 1 257
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,268评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,894评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,014评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,770评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,435评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,312评论 2 260

推荐阅读更多精彩内容