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
段磨。