記自定義彈框dialog

效果圖如下:



中間提示框彈出來的樣式就是自定義的

接下來是代碼部分


//提示彈出框
private void showDialog() {
    new MyDialog(MessageNotificationActivity.this, R.style.MyDialog, View.inflate(context,R.layout.view_dialog_minemessage),
            "", "確定",
            new MyDialog.DialogClickListener() {
                @Override
                public void onRightBtnClick(Dialog dialog) {
                    dialog.dismiss();
                }

                @Override
                public void onLeftBtnClick(Dialog dialog) {
                    dialog.dismiss();

                }
            }).show();
}

接下來就是style樣式

<style name="MyDialog" parent="@android:style/Theme.Dialog">
    <item name="android:windowFrame">@null</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowBackground">@drawable/round_rect_translucent_black_shape</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:windowContentOverlay">@null</item>
</style>

style中包含round_rect_translucent_black_shape

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

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

    <solid android:color="#fff" />
   
    <size
        android:height="5dp"
        android:width="5dp" />

</shape>

接下來就是MyDialog了:

public class MyDialog extends Dialog implements
        View.OnClickListener {
    private DialogClickListener listener;
    Context context;
    private TextView dialog_textViewID;
    private TextView dialog_textViewID1;
    private TextView tvLine;
    private String leftBtnText;
    private String rightBtnText;
    private FrameLayout fl_dialog;
    private View view;

    public MyDialog(Context context) {
        super(context);
        // TODO Auto-generated constructor stub
        this.context = context;
    }

    public MyDialog(Context context, int theme, View view,
                    String leftBtnText, String rightBtnText,
                    DialogClickListener listener) {
        super(context, theme);
        this.context = context;
        this.view = view;
        this.leftBtnText = leftBtnText;
        this.rightBtnText = rightBtnText;
        this.listener = listener;
    }

    public void setTextSize(int size) {
        dialog_textViewID.setTextSize(size);
        dialog_textViewID1.setTextSize(size);
    }

    ;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        this.setContentView(R.layout.dialog);
        dialog_textViewID1 = (TextView) findViewById(R.id.dialog_textViewID1);
        dialog_textViewID = (TextView) findViewById(R.id.dialog_textViewID);
        tvLine = (TextView) findViewById(R.id.tv_line);
        fl_dialog = (FrameLayout) findViewById(R.id.fl_dialog);
        dialog_textViewID.setOnClickListener(this);
        dialog_textViewID1.setOnClickListener(this);
        initView();
        initDialog(context);
    }

    /**
     * 設置dialog的寬爲屏幕的3分之1
     *
     * @param context
     */
    private void initDialog(Context context) {
        setCanceledOnTouchOutside(false);
        setOnKeyListener(new OnKeyListener() {

            @Override
            public boolean onKey(DialogInterface dialog, int keyCode,
                                 KeyEvent event) {
                if (keyCode == KeyEvent.KEYCODE_BACK
                        && event.getRepeatCount() == 0) {
                    return true;
                } else {
                    return false;
                }
            }
        });
        WindowManager windowManager = this.getWindow().getWindowManager();
        Display display = windowManager.getDefaultDisplay();
        WindowManager.LayoutParams lp = this.getWindow().getAttributes();
        //lp.width = (int) (display.getWidth() / 6 * 5); //// 設置寬度
        lp.width = (int) (display.getWidth() / 6 * 4.5); //// 設置寬度
        Window window = this.getWindow();
        window.setWindowAnimations(R.style.MydialogWindowAnim);
        window.setAttributes(lp);


    }

    private void initView() {
        fl_dialog.addView(view);

        if (leftBtnText.equals("")) {
            tvLine.setVisibility(View.GONE);
            dialog_textViewID.setVisibility(View.GONE);
        } else {
            tvLine.setVisibility(View.VISIBLE);
            dialog_textViewID.setText(leftBtnText);
        }

        if (rightBtnText.equals("")) {
//            tvLine.setVisibility(View.GONE);
            dialog_textViewID1.setVisibility(View.GONE);
        } else {
//            tvLine.setVisibility(View.VISIBLE);
            dialog_textViewID1.setText(rightBtnText);
        }

    }

    public interface DialogClickListener {
        void onLeftBtnClick(Dialog dialog);

        void onRightBtnClick(Dialog dialog);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.dialog_textViewID:
                listener.onLeftBtnClick(this);
                break;
            case R.id.dialog_textViewID1:
                listener.onRightBtnClick(this);
                break;
            default:
                break;
        }
    }


}

dialog佈局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/round_rect_translucent_black_shape"
    android:orientation="vertical">

    <TextView
        android:id="@+id/tv_restinfo_pop_tel_content"
        android:layout_width="match_parent"
        android:layout_height="80dp"
        android:gravity="center"
        android:padding="10dp"
        android:text="您確定要刪除麼?"
        android:textColor="@color/text_gray"
        android:textSize="18dp"
        android:visibility="gone" />

    <FrameLayout
        android:id="@+id/fl_dialog"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="center"></FrameLayout>

    <TextView
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="#f0f0f0" />

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

        <TextView
            android:id="@+id/dialog_textViewID"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:gravity="center"
            android:padding="10dp"
            android:text="確認"
            android:textColor="@color/text_gray"
            android:textSize="20sp" />

        <TextView
            android:id="@+id/tv_line"
            android:layout_width="1dp"
            android:layout_height="match_parent"
            android:background="#f0f0f0" />

        <TextView
            android:id="@+id/dialog_textViewID1"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:gravity="center"
            android:padding="10dp"
            android:text="取消"
            android:textColor="@color/text_blue"
            android:textSize="20sp" />
    </LinearLayout>
</LinearLayout>

MyDialog中還包括了一個style樣式:MydialogWindowAnim

<style name="MydialogWindowAnim" mce_bogus="1" parent="android:Animation">
    <item name="android:windowEnterAnimation">@anim/dialog_enter_anim</item>
    <item name="android:windowExitAnimation">@anim/dialog_exit_anim</item>
</style>


MydialogWindowAnim中包括了兩個動畫效果:

1,dialog_enter_anim:

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

    <translate
        android:duration="200"
        android:fromYDelta="100%p" />
</set>  

2,dialog_exit_anim:

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

    <translate
        android:toYDelta="100%p"
        android:duration="200"
    />
</set>  

ok,這就全部完成了

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