1. 程式人生 > >Android自定義主題樣式詳解(結合自定義title欄講解)

Android自定義主題樣式詳解(結合自定義title欄講解)

此篇部落格將總結主題樣式的自定義並且結合例項自定義title欄進行講解。為了方便閱讀,在此先寫明文章結構:

1.對android主題樣式的理解 (簡略結合系統自帶樣式的講解)

2.如何自定義主題樣式 (主要,有例子)

3.如何自定義title欄(例子)

一、對android主題樣式的理解

1.首先要先理解android app的各個部分的名稱、概念。如下圖這裡寫圖片描述

這個就是app的各個部分的名稱,一會的自定義主題樣式的item設定就與他們有關啦!

2.對大體主題樣式的說明:

(這裡的雙括號本來是單括號來的,可是涉及到Markdown語法,會缺失文字,所以用一邊雙括號代替)
1.在res/values 目錄下新建一個名叫style.xml的檔案。增加一個根節點。
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的部落格】