Android 常用代碼整理:Android 常用彈窗整理

說明:大部分內容都是參考別的文章,這裏做整理是爲了以後的編程有實用的模板,可以即需即用。

一、自定義 UI 的 Dialog


代碼:

	
private void showDialog() {
	final Dialog dialog = new Dialog(this, R.style.NormalDialogStyle);
	View view = View.inflate(this, R.layout.dialog_custom, null);
	WindowManager.LayoutParams lp = dialog.getWindow().getAttributes();
	lp.width = WindowManager.LayoutParams.WRAP_CONTENT;
	lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
	lp.gravity = Gravity.CENTER;
	dialog.setContentView(view, lp);
	// 設置點擊對話框外部是否關閉對話框
	dialog.setCanceledOnTouchOutside(true);
	
	Button cancel = (Button) view.findViewById(R.id.bt_cancel);
	Button confirm = (Button) view.findViewById(R.id.bt_confirm);
	cancel.setOnClickListener(new View.OnClickListener() {
	    @Override
	    public void onClick(View v) {
	        dialog.dismiss();
	    }
	});
	confirm.setOnClickListener(new View.OnClickListener() {
	    @Override
	    public void onClick(View v) {
	        dialog.dismiss();
	    }
	});
	dialog.show();
}

styles.xml:

<!-- dialog 對話框的樣式 -->
    <style name="NormalDialogStyle">
        <!-- 對話框背景 -->
        <item name="android:windowBackground">@android:color/transparent</item>
        <!-- 邊框 -->
        <item name="android:windowFrame">@null</item>
        <!-- 沒有標題 -->
        <item name="android:windowNoTitle">true</item>
        <!-- 是否浮現在 Activity 之上 -->
        <item name="android:windowIsFloating">true</item>
        <!-- 背景透明 -->
        <item name="android:windowIsTranslucent">false</item>
        <!-- 是否有覆蓋 -->
        <item name="android:windowContentOverlay">@null</item>
        <!-- 進出的顯示動畫 -->
        <!--<item name="android:windowAnimationStyle">@style/normalDialogAnim</item>-->
        <!-- 背景變暗 -->
        <item name="android:backgroundDimEnabled">true</item>
    </style>

佈局文件:

<?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"
    android:background="@drawable/bg_solid_r4_ffffff">

    <ImageView
        android:id="@+id/iv_icon"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="22dp"
        android:src="@mipmap/ic_launcher" />

    <TextView
        android:id="@+id/tv_tip"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/iv_icon"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="13dp"
        android:text="提示內容" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/tv_tip"
        android:layout_marginBottom="20dp"
        android:layout_marginTop="20dp"
        android:gravity="center">

        <Button
            android:id="@+id/bt_cancel"
            android:layout_width="100dp"
            android:layout_height="35dp"
            android:layout_marginRight="12dp"
            android:background="@drawable/bg_solid_r4_959595"
            android:text="@string/common_return"
            android:textColor="@color/white"
            android:textSize="16dp" />

        <Button
            android:id="@+id/bt_confirm"
            android:layout_width="100dp"
            android:layout_height="35dp"
            android:layout_marginLeft="12dp"
            android:background="@drawable/bg_solid_r4_e52848"
            android:text="@string/common_confirm"
            android:textColor="@color/white"
            android:textSize="16dp" />

    </LinearLayout>

</RelativeLayout>

二、加載中 Dialog

    // BaseActivity.class
    private Dialog mLoadingDialog;
    protected void showLoadingDialog() {
        if (mLoadingDialog == null) {
            mLoadingDialog = new Dialog(this, R.style.NormalDialogStyle);
            View view = LayoutInflater.from(this).inflate(R.layout.dialog_loading, null);
            WindowManager.LayoutParams lp = mLoadingDialog.getWindow().getAttributes();
            lp.width = WindowManager.LayoutParams.WRAP_CONTENT;
            lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
            lp.gravity = Gravity.CENTER;
            mLoadingDialog.setContentView(view, lp);
            mLoadingDialog.setCanceledOnTouchOutside(false);
            mLoadingDialog.show();
        } else {
            mLoadingDialog.show();
        }
    }

    protected void hideLoadingDialog() {
        if (mLoadingDialog != null) {
            mLoadingDialog.dismiss();
        }
    }
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:padding="20dp">

    <ProgressBar
        android:id="@+id/more_progress"
        style="?android:attr/progressBarStyleInverse"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:indeterminateDuration="1500" />

    <TextView
        android:id="@+id/tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/more_progress"
        android:layout_centerHorizontal="true"
        android:gravity="bottom|center_horizontal"
        android:text="加載中..."
        android:textSize="12sp"
        android:visibility="gone" />
    
</RelativeLayout>

三、列表選擇框 AlertDialog

    private void showStationDialog() {
        final String[] items = new String[]{"選項一", "選項二", "選項三", "選項四", "選項五"};
        AlertDialog dialog = new AlertDialog.Builder(this)
                .setItems(items, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        mTvSelect.setText(items[which]);
                    }
                }).create();
        dialog.show();
    }

四、定點彈窗 PopupWindow

    private void showDeletePop(View v) {
        View view = LayoutInflater.from(mContext).inflate(R.layout.pop_delete, null, false);
        TextView tvDelete = (TextView) view.findViewById(R.id.tv_delete);
        final PopupWindow popupWindow = new PopupWindow(view, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, true);
        // 設置加載動畫
        // popupWindow.setAnimationStyle(R.anim.xxx);
        // 點擊非 PopupWindow區域時使 PopupWindow消失,如果爲 false,無論按多少次後退鍵 PopupWindow都不會關閉,而且退不出程序
        popupWindow.setTouchable(true);
        // 要爲 popupWindow設置一個背景纔有效
        popupWindow.setBackgroundDrawable(new ColorDrawable(0x00000000));
        // 設置 popupWindow顯示的位置,參數依次是參照 View,x軸的偏移量,y軸的偏移量
        popupWindow.showAsDropDown(v, 50, -100);
        tvDelete.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                popupWindow.dismiss();
                ... ...
            }
        });
    }
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@mipmap/bg_msg">

    <TextView
        android:id="@+id/tv_delete"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="10dp"
        android:text="刪除" />

</LinearLayout>

參考文章:
1、https://blog.csdn.net/a_zhon/article/details/54578047
2、http://www.runoob.com/w3cnote/android-tutorial-popupwindow.html

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