android:自定義Material Design風(fēng)格ProgressDialog的進(jìn)度框

1乌奇、前言

在安卓開發(fā)中陪竿,有時候我們需要自定義進(jìn)度條對話框ProgressDialog來滿足設(shè)計的需求迄汛。本來主要講解如何來快速實現(xiàn)一個自定義進(jìn)度條并且修改進(jìn)度條顏色寂恬。

先看下最終效果 :

2扣墩、代碼編寫

2.1 布局文件

以下是自定義對話框的布局哲银,實際開發(fā)中我們可以根據(jù)需求進(jìn)行個性化布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="100dp"
              android:layout_height="100dp"
              android:layout_gravity="center_horizontal"
              android:background="@drawable/shape_dialog_bg"
              android:layout_centerInParent="true"
              android:orientation="vertical">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp">

        <ProgressBar
            android:id="@+id/pb_load"
            android:layout_width="65dp"
            android:layout_height="65dp"
            android:layout_centerInParent="true"/>

    </RelativeLayout>

    <TextView
        android:id="@+id/tv_load_dialog"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:text="@string/loading"
        android:textColor="#9a9b98"
        android:textSize="12sp"/>

</LinearLayout>

shape代碼:

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

    <corners android:radius="8dp" />

    <solid android:color="#88000000" />

</shape>

2.2 自定義ProgressDialog

直接貼代碼,代碼如下:

/**
 * 加載提醒對話框
 */
public class CustomDialog extends ProgressDialog
{
    public CustomDialog(Context context)
    {
        super(context);
    }

    public CustomDialog(Context context, int theme)
    {
        super(context, theme);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        init(getContext());
    }

    private void init(Context context)
    {
        //設(shè)置不可取消呻惕,點擊其他區(qū)域不能取消荆责,實際中可以抽出去封裝供外包設(shè)置
        setCancelable(false);
        setCanceledOnTouchOutside(false);

        setContentView(R.layout.load_dialog);
        WindowManager.LayoutParams params = getWindow().getAttributes();
        params.width = WindowManager.LayoutParams.WRAP_CONTENT;
        params.height = WindowManager.LayoutParams.WRAP_CONTENT;
        getWindow().setAttributes(params);
    }

    @Override
    public void show()
    {
        super.show();
    }
}

以上代碼中,我們設(shè)置了不可取消對話框亚脆,在實際開發(fā)中做院,我們可以根據(jù)需求提供一個公開的方法供外部調(diào)用。除此之外,比如提示文本類容等键耕,也可以暴露方法出來寺滚,本文的例子只實現(xiàn)了一個簡單的進(jìn)度對話框。

2.3 使用

      CustomDialog dialog = new CustomDialog(this);
        dialog.show();

在acitvity中調(diào)用如上方法就可以顯示對話框屈雄,隱藏的使用對話框的dismiss()方法村视。

3、 存在問題

3.1 寬度過寬

代碼寫完酒奶,演示效果的時候蚁孔,我們發(fā)現(xiàn)對話框度出現(xiàn)了問題:在按照5.0以上系統(tǒng)左右倆邊留白了,對話框?qū)嶋H寬度大于我們布局寬度惋嚎,先看
效果圖勒虾。

解決寬度留白問題:

    <style name="CustomDialog" parent="Theme.AppCompat.Dialog">
        <item name="android:backgroundDimEnabled">false</item>
        <item name="android:windowBackground">@android:color/transparent</item>
    </style>

首先我們自定義style,繼承于Theme.AppCompat.Dialog瘸彤,重寫倆個屬性修然,其中

  • android:backgroundDimEnabled:表示頁面時候變暗,我們設(shè)置false质况,不變暗
  • android:windowBackground:表示背景顏色愕宋,我們這種為透明,因為我們給布局文件背景設(shè)置了圓角结榄,如果不設(shè)置對話框為透明的話中贝,圓角部分會留白

創(chuàng)建好自定義樣式后,我們只要在創(chuàng)建對話框的時候調(diào)用另外重載構(gòu)造方法設(shè)置樣式就可以new CustomDialog(this, R.style.CustomDialog)解決寬度不適配問題臼朗。

下看下效果圖:

3.2 修改顏色

搞定寬度問題后邻寿,如何修改進(jìn)度條顏色呢,當(dāng)時我也在這個地方卡了半個多小時视哑,后來一層一層的點安卓資源文件才發(fā)現(xiàn)在主題下有個colorAccent值控制對話框顏色绣否,其實他的意思是著重色,像按鈕挡毅,toolbar都是默認(rèn)采用這個顏色蒜撮。我們在自定義樣式中加上這個就行。
如下代碼:

    <style name="CustomDialog" parent="AppTheme">
        <item name="android:backgroundDimEnabled">false</item>
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="colorAccent">#ffE91E63</item>
    </style>

這里需要注意的是使用colorAccent兼容低版本跪呈,而不是android:colorAccent段磨。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市耗绿,隨后出現(xiàn)的幾起案子苹支,更是在濱河造成了極大的恐慌,老刑警劉巖误阻,帶你破解...
    沈念sama閱讀 222,681評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件债蜜,死亡現(xiàn)場離奇詭異琉用,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)策幼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評論 3 399
  • 文/潘曉璐 我一進(jìn)店門邑时,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人特姐,你說我怎么就攤上這事晶丘。” “怎么了唐含?”我有些...
    開封第一講書人閱讀 169,421評論 0 362
  • 文/不壞的土叔 我叫張陵浅浮,是天一觀的道長。 經(jīng)常有香客問我捷枯,道長滚秩,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,114評論 1 300
  • 正文 為了忘掉前任淮捆,我火速辦了婚禮郁油,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘攀痊。我一直安慰自己桐腌,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 69,116評論 6 398
  • 文/花漫 我一把揭開白布苟径。 她就那樣靜靜地躺著案站,像睡著了一般。 火紅的嫁衣襯著肌膚如雪棘街。 梳的紋絲不亂的頭發(fā)上蟆盐,一...
    開封第一講書人閱讀 52,713評論 1 312
  • 那天,我揣著相機(jī)與錄音遭殉,去河邊找鬼石挂。 笑死,一個胖子當(dāng)著我的面吹牛恩沽,可吹牛的內(nèi)容都是我干的誊稚。 我是一名探鬼主播翔始,決...
    沈念sama閱讀 41,170評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼罗心,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了城瞎?” 一聲冷哼從身側(cè)響起渤闷,我...
    開封第一講書人閱讀 40,116評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎脖镀,沒想到半個月后飒箭,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,651評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,714評論 3 342
  • 正文 我和宋清朗相戀三年弦蹂,在試婚紗的時候發(fā)現(xiàn)自己被綠了肩碟。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,865評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡凸椿,死狀恐怖削祈,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情脑漫,我是刑警寧澤髓抑,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站优幸,受9級特大地震影響吨拍,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜网杆,卻給世界環(huán)境...
    茶點故事閱讀 42,211評論 3 336
  • 文/蒙蒙 一羹饰、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧碳却,春花似錦严里、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,699評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至座柱,卻和暖如春迷帜,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背色洞。 一陣腳步聲響...
    開封第一講書人閱讀 33,814評論 1 274
  • 我被黑心中介騙來泰國打工戏锹, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人火诸。 一個月前我還...
    沈念sama閱讀 49,299評論 3 379
  • 正文 我出身青樓锦针,卻偏偏與公主長得像,于是被迫代替她去往敵國和親置蜀。 傳聞我的和親對象是個殘疾皇子奈搜,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,870評論 2 361

推薦閱讀更多精彩內(nèi)容