android修改HOLO對話方塊風格,androidholo

來源:互聯網
上載者:User

android修改HOLO對話方塊風格,androidholo

andriod中修改對話方塊的風格,可以通過設定theme來實現,部分元素需要通過Java代碼來修改,下面以修改對話方塊的標題為例說明各步驟。

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建立出來的對話方塊,主題還是原來的。所以我們還需要以下步驟。

6、編寫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下面還有一層對話方塊的背景,或者是對話方塊的背景遮住了所有內容這樣的問題存在。

7、指定AlertDialog的主題。

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

<item name="android:alertDialogTheme">@style/Theme.DeviceDefault.Dialog.Alert</item>
8、修改標題下面的藍色線。

如果你修改了對話方塊的佈景主題色彩,那麼標題下面的藍色的線肯定會讓你很鬱悶。如果對話方塊較少,你可以選擇隱藏標題,然後自訂一個包含了標題的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);    }

這行代碼對於自訂的Dialog,可以在setContentView之後調用。但是對於AlertDialog,必須在show()方法被調用之後才可以去調用,否則會報錯。


升級了Android 4.2.2的系統,為什麼許多應用的菜單和彈出的提示還不是holo的風格?只有使用4.0sdk開發才
android 2.1的源碼分析之長按電源鍵彈出對話方塊功能修改1.dialog由PhoneWindowManager控制PhoneWindowManagerinterceptKeyTq方法程式碼

mHandler.postDelayed(mPowerLongPress, ViewConfiguration.getGlobalActionKeyTimeout());

mProwerLongPressRunnable執行時調用GlobalActionsshowDialog方法所dialog由GlobalActions管理PowerDialog之前版本現已經棄用了

2.GlobalActionscreateDialog方法mSilentModeToggle actiononToggle方法加入

mAudioManager.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER, on ? AudioManager.VIBRATE_SETTING_ON : AudioManager.VIBRATE_SETTING_OFF);

句仿照鈴聲處理應該沒問題過沒試所也能確定

希望對有協助

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.