導航:首頁 > 源碼編譯 > style和theme源碼

style和theme源碼

發布時間:2025-09-27 15:45:15

⑴ 如何在 android 應用程序中使用自定義主題

在Android中,定義外觀最簡單的方式是直接設置屬性在視圖對象上。由於要對整個應用程序設置樣式,這種方法就顯得不是很方便了。因此,我們可以創建
樣式來綁定視圖屬性。但要注意的是,樣式只能設置在xml里。這意味著,我們在創建/載入視圖的時候,只能一次設置一個樣式。下面是如何在res
/values/styles.xml文件中給TextView設置屬性的示例。

<style name="CustomText" parent="<a href="http" target="_blank" rel="nofollow">@android</a> :style/TextAppearance.Medium">
<item name="android:textSize">20sp</item> <item name="android:textColor">#008</item>
</style>

我們引用@style/CustomText樣式應用在我們的layout.xml文件中。該樣式引用了一個父樣式
@android:style/TextAppearance.Medium。由於開始樣式引自android: 命名空間,那麼我們這個樣式默認也隨android平台。

創建主題綁定樣式

假設我們要改變我們所有TextView的文字大小和顏色,並且不需要明確設置每一個TextView。這是一個非常常見的情況,幸運的
是,Android提供了一個非常強大的主題機制。從本質上講,主題就是樣式資源本身,使用「key」指向具體的樣式。一個視圖對象基於這個key可以查
看到具體的樣式。下面是一個簡單的例子,在res/values/themes.xml文件:

<style name="Theme.MyApp" parent="<a href="http" target="_blank" rel="nofollow">@android</a> :style/Theme.Holo">
<item name="android:textAppearance">@style/CustomText</item>
</style>

如上所述,主題是樣式資源本身,所以我們聲明一個Theme.App繼承自Android平台提供的holo主題。我們將我們的CustomText樣式
指定到android:textAppearance屬性。屬性就是一個預定義的「變數」,它可以被其他資源元素引用。事實上,它也可以創建自定義屬性在
res/values/attr.xml文件。

現在有趣的事情來了。我們的主題Theme.MyApp不僅可以通過AndroidManifest.xml的設置應用到Activity上,它也可以在
運行時在代碼中設置。你將不得不重新啟動當前Activity(或使用ContextWrapper應用UI的主題部分),但它使主題更加動態。

⑵ android怎麼修改系統dialog風格

1、編寫一個文本樣式。

DIALOG的標題是一個textview,在sytles.xml中,添加如下代碼來設置你自己的文本樣式:

?

<style name="DialogWindowTitle">

<item name="android:textSize">22sp</item>

<item name="android:textColor">@color/font_dark_grey</item>

</style>

2、設置對話框的標題主題。

上面的標題文本並不能直接設置為對話框的標題樣式。 我們還需要編寫一個表示標題的主題的style,在這里指定標題的文本樣式。代碼如下:

?

<style name="DialogWindowTitle.DeviceDefault">

<item name="android:maxLines">1</item>

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

<item name="android:textAppearance">@style/DialogWindowTitle</item>

</style>

3、設置對話框主題。

接下來,我們編寫我們的對話框主題,在這里指定標題的主題。由於一些屬性並不是public的,所以我們需要繼承自原來的某個style,代碼如下:

?

<!--Dialog主題-->

<style name="Theme.DeviceDefault.Dialog" parent="@android:style/Theme.DeviceDefault.Light.Dialog">

<item name="android:windowTitleStyle">@style/DialogWindowTitle.DeviceDefault</item>

</style>

4、自定義App的主題。

接下來,我們需要在我們的App theme中指定我們的對話框使用這種主題,所以需要定義一個App theme。同樣由於App theme的許多屬性並不是public的(比如下面要提到的標題下面的那條藍線),所以我們要繼承自一個原生的style。這里我根據程序需要選擇了Theme.Holo.Light.NoActionBar,代碼如下:

?

<style name="ParkingTheme" parent="@android:style/Theme.Holo.Light.NoActionBar">

<item name="android:dialogTheme">@style/Theme.DeviceDefault.Dialog</item>

</style>

5、指定App主題。

最後一步,我們需要在AndroidManifest.xml文件中,指定我們的app主題。這步很簡單,只需要在application標簽中指定android:theme的值即可,如下:

?

android:theme="@style/ParkingTheme"

不過這只是指定了Dialog的主題。如果是通過AlertDialog創建出來的對話框,主題還是原來的。所以我們還需要以下步驟。

7、編寫AlertDialog主題。

我們無法直接繼承系統主題里的AlertDialog的style。如把parent指定為Theme.DeviceDefault.Dialog.Alert,Theme.Holo.Dialog.Alert,Theme.DeviceDefault.Light.Dialog.Alert或Theme.Holo.Light.Dialog.Alert,都會導致編譯不過。所以我們需要繼承自Dialog的style。在這里我以Theme.Holo.Light.Dialog為例,代碼如下:

<!--AlderDialog主題-->

<style name="Theme.DeviceDefault.Dialog.Alert" parent="@android:style/Theme.Holo.Light.Dialog">

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

<item name="android:windowTitleStyle">@style/DialogWindowTitle.DeviceDefault</item>

<item name="android:windowContentOverlay">@null</item>

<item name="android:windowMinWidthMajor">@android:dimen/dialog_min_width_major</item>

<item name="android:windowMinWidthMinor">@android:dimen/dialog_min_width_minor</item>

</style>

在這里我參考了原生的alertDialog的style,設定了窗口背景為透明,以及windowContentOverlay為null這兩個重要屬性,否則你會看到在AlertDialog下面還有一層對話框的背景,或者是對話框的背景遮住了所有內容這樣的問題存在。

8、指定AlertDialog的主題。

我們需要在第4步所說的自定義的AppTheme中,添加一行代碼來指定要使用的AlertDialog的style,代碼如下:

?

<item name="android:alertDialogTheme">@style/Theme.DeviceDefault.Dialog.Alert</item>

9、修改標題下面的藍色線。

如果你修改了對話框的主題顏色,那麼標題下面的藍色的線肯定會讓你很郁悶。如果對話框較少,你可以選擇隱藏標題,然後自定義一個包含了標題的View來設置為對話框的內容。但是如果你的對話框有許多種,而且本來都是可以調用原來的API就來生成的話,要去定義這么多個帶標題的view,這樣做下來心裡肯定是很糾結的。

標題下面的藍色的線,並不是在Dialog或AlertDialog中設置或通過它們的style中定義的。它是定義在各種風格的dialog的layout當中,然後再在AppTheme裡面指定dialog的對應屬性。遺憾的是,目前我看到這幾個相關屬性還不是public的,不能自己設置,所以只有通過java代碼來實現了。

表示這條藍色的線的叫做titleDivider,我們可以通過getResources()的API來獲取它的IP,然後設置顏色。代碼如下:

?

public static final void dialogTitleLineColor(Dialog dialog, int color) {

Context context = dialog.getContext();

int divierId = context.getResources().getIdentifier("android:id/titleDivider", null, null);

View divider = dialog.findViewById(divierId);

divider.setBackgroundColor(color);

⑶ 如何在Android中實現全屏,去掉標題欄效果

在進行Android UI設計時,我們經常需要將屏幕設置成無標題欄或者全屏。要實現起來也非常簡單,主要有兩種方法:配置xml文件和編寫代碼設置。

1.在xml文件中進行配置

在項目的清單文件AndroidManifest.xml中,找到需要全屏或設置成無標題欄的Activity,在該Activity進行如下配置即可。

實現全屏效果:
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
實現無標題欄(但有系統自帶的任務欄):
android:theme="@android:style/Theme.NoTitleBar"
2.編寫代碼設置
在程序中編寫代碼進行設置,只需在onCreate()方法中加入如下代碼即可
實現全屏效果:
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
實現無標題欄(但有系統自帶的任務欄):
requestWindowFeature(Window.FEATURE_NO_TITLE);
附:Android系統自帶樣式
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="Translucent" 透明背景
android:theme="Theme.Translucent.NoTitleBar" 透明背景並無標題
android:theme="Theme.Translucent.NoTitleBar.Fullscreen" 透明背景並無標題,全屏
android:theme="Theme.Panel" 面板風格顯示
android:theme="Theme.Light.Panel" 平板風格顯示

⑷ 安卓開發,怎麼做一個全屏的界面

  1. getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN)。

  2. 在android項目的主配置文件的application的屬性中設置,設置方式android:theme="@android:style/Theme.NoTitleBar.Fullscreen"。

  3. 在android項目的主配置文件的application的屬性中設置,設置方式二:
    android:theme="@style/fullscreem"。

⑸ android theme 和stytle的區別

Theme 和Style資源,將一些通用的屬性提取出來,方便使用。

相同:
Theme和Style位於values文件夾下styles.xml下,格式相同。

[java] view plain
<style name="MyTransparent">
<item name="android:windowBackground">@color/transparent_background</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowNoTitle">true</item>
</style>
<item name="Android:windowNoTitle">?android:windowIsTranslucent</item>其中 問號表示引用本主題中已經定義過的資源的值。

在需要使用的時候調用

[java] view plain
<EditText
android:id="@+id/nameEdit"
<span style="color:#ff0000;"> style="@style/LoginOrRegisterEditStyle"</span>
android:hint="@string/input_real_name"
android:layout_below="@id/tipHead"
android:layout_marginTop="20dp" />

不同:
Theme在AndroidManifest.xml中德Application節點或者Activity節點設置android:theme,或者在對應Activity中通過代碼設置setTheme(),影響整個應用或者一個Activity.
Style一般是在布局中的View中設置。影響單個View,如EditText,TextView等等。

如果主題和樣式屬性有沖突,樣式的屬性高於主題。

如果需要使用系統自帶的主題

[java] view plain
android:theme=<span style="color:#ff0000;">"@android:style</span>/Theme.Light.NoTitleBar"

閱讀全文

與style和theme源碼相關的資料

熱點內容
攬運pdf 瀏覽:433
聽力app怎麼注冊 瀏覽:963
截面相關性檢驗stata命令 瀏覽:54
直線命令截圖 瀏覽:981
單片機多大孩子學習 瀏覽:932
udpserverlinux 瀏覽:325
程序員是老加班嗎 瀏覽:230
通達信導入源碼公式後如何刷新 瀏覽:651
php和c區別嗎 瀏覽:288
phpsha1解密 瀏覽:253
linux命令啟動vmware 瀏覽:21
linux剪切文件夾命令 瀏覽:38
php文件不存在創建 瀏覽:257
360網盤linux 瀏覽:791
style和theme源碼 瀏覽:322
有什麼辦法裝個安卓桌面 瀏覽:73
加密u盤只能在一個電腦打開嗎 瀏覽:843
php加號空格 瀏覽:172
安卓z版什麼意思 瀏覽:97
騰訊的雲伺服器都是什麼網路 瀏覽:903