Android開發之萬能的Dialog,通過自定義靈活佈局Dialog,實現任意dialog樣式,可修改性極強,可封裝在框架中

Android 開發筆記:

使用佈局打造任意的Dialog樣式
在這裏插入圖片描述
在這裏插入圖片描述
自定義Dialog【CustomDialog.java】

public class CustomDialog extends Dialog {
    //定義模板
    public CustomDialog(Context context, int layout, int style) {
        this(context,WindowManager.LayoutParams.WRAP_CONTENT,
                WindowManager.LayoutParams.WRAP_CONTENT,
                layout,style,Gravity.CENTER);  // 上下文/寬/高/佈局/主題/方向
    }

    //定義屬性
    public CustomDialog(Context context, int width, int height, int layout, int style, int gravity, int anim){
        super(context,style);
        //設置屬性
        setContentView(layout);
        Window window = getWindow();
        WindowManager.LayoutParams layoutParams = window.getAttributes();
        layoutParams.width = width;
        layoutParams.height = height;
        layoutParams.gravity = gravity;
        window.setAttributes(layoutParams);//傳入值
        window.setWindowAnimations(anim);//加動畫
    }

    //實例
    public CustomDialog(Context context, int width, int height, int layout, int style, int gravity){    //anim動畫統一,所以直接定義不用傳值
        this(context,width,height,layout,style,gravity,R.style.pop_anim_style);
    }
}

.
進入的動畫【pop_in.xml】

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 移動 (///) -->
    <translate
        android:duration = "@android:integer/config_shortAnimTime"
        android:fromXDelta="0"
        android:fromYDelta="100%"
        android:toXDelta="0"
        android:toYDelta="0"/>

</set>

.
退出的動畫【pop_out.xml】

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 移動 (///) -->
    <translate
        android:duration = "@android:integer/config_shortAnimTime"
        android:fromXDelta="0"
        android:fromYDelta="0"
        android:toXDelta="0"
        android:toYDelta="100%"/>
</set>

.
背景【bg.xml】

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 灰色陰影 -->
    <item
        android:left="0dp"
        android:top="0dp">
        <shape>
            <solid android:color="#808c8c8c" />
            <corners android:radius="10dp" />
        </shape>
    </item>
    <!-- 白色前景 -->
    <item
        android:bottom="1dp"
        android:right="0dp">
        <shape>
            <solid android:color="#FFFFFF" />
            <corners android:radius="10dp" />
        </shape>
    </item>
</layer-list>

.
在【styles.xml】中添加樣式

    <!--自定義Dialog-->
    <style name="pop_anim_style">
        <item name="android:windowEnterAnimation">@anim/pop_in</item>  <!--進入的動畫-->
        <item name="android:windowExitAnimation">@anim/pop_out</item>  <!--退出的動畫-->
    </style>

    <style name="Theme_dialog" parent="@android:style/Theme.Dialog">
        <item name="android:windowBackground">@android:color/transparent</item>  <!--全透明-->
        <item name="android:windowNoTitle">true</item>  <!--不需要title-->
    </style>

.
最後【MainActivity.java】

public class MainActivity extends AppCompatActivity {

    private CustomDialog mDialog;  //new一個提示框
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initView();
    }

    private void initView() {
        // 初始化 Dialog
        mDialog = new CustomDialog(MainActivity.this, WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT,
                R.layout.dialog_time, R.style.Theme_dialog, Gravity.CENTER, 0);
        //屏幕外點擊無效
        mDialog.setCancelable(false);

        TextView Dialog_Cancel = mDialog.findViewById(R.id.Dialog_Cancel);
        TextView Dialog_Enter = mDialog.findViewById(R.id.Dialog_Enter);
        Button Button = findViewById(R.id.Button);

        Button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mDialog.show();
            }
        });
        Dialog_Cancel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mDialog.dismiss();
            }
        });

        Dialog_Enter.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mDialog.dismiss();
            }
        });
    }
}

.
佈局文件【activity_main.xml】

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/Button"
        android:layout_width="wrap_content"
        android:layout_centerInParent="true"
        android:layout_height="wrap_content"
        android:text="Hello World!" />

</RelativeLayout>

.
佈局文件【dialog_time.xml】

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

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="30dp"
        android:layout_marginTop="20dp"
        android:layout_marginRight="30dp"
        android:background="@drawable/bg"
        android:gravity="center"
        android:orientation="vertical">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:padding="10dp"
            android:text="選擇考試"
            android:textColor="#333333"
            android:textSize="16sp" />
        <View
            android:layout_width="match_parent"
            android:layout_height="200dp"/>

        <View
            android:layout_width="match_parent"
            android:layout_height="0.5dp"
            android:background="#e4e3e3" />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

            <TextView
                android:id="@+id/Dialog_Cancel"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:gravity="center"
                android:padding="10dp"
                android:text="取消"
                android:textColor="#333333" />

            <View
                android:layout_width="0.5dp"
                android:layout_height="25dp"
                android:layout_gravity="center_vertical"
                android:background="#e4e3e3" />

            <TextView
                android:id="@+id/Dialog_Enter"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:gravity="center"
                android:padding="10dp"
                android:text="確定"
                android:textColor="#5A9BFF" />
        </LinearLayout>
    </LinearLayout>

</RelativeLayout>

源碼下載:https://download.csdn.net/download/erp_lxkun_jak/11539078

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章