關於自定義Dialog的一次折騰

《新手,本身的簡單理解,勿噴,有更好建議歡迎提出》
 
一、在設置dialog佈局上的時候 我須要作一個圓角的dialog,我像往常同樣定義一個<shape>而後作爲個人dialog的背景,可是此時我發如今dialog的四周有一部分突出的四個小角,代碼設置樣式設置仍是各類沒解決,後經網上一篇文章啓發,我將dialog的背景與系統背景均設置成了透明色,而後在shape中再經過solid爲dialog整個填充上顏色,最終實現了我想要的效果;
二、實現代碼:
     在styles文件中設置我本身的對話框的一些樣式
<style name="MyDialog" parent="@android:style/Theme.Dialog">
    <item name="android:windowFrame">@null</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:background">#00000000</item>
    <item name="android:windowBackground">@android:color/transparent</item>
</style>
    自定義對話框最外圍的背景(我定義了一個dialog_bg_xml文件):
 
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <corners android:radius="5dp"/>
    <stroke android:width="1dp"
        android:color="@android:color/holo_blue_bright"/>
    <solid android:color="@android:color/white"/>
</shape>
  接着是佈局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:background="@drawable/dialog_bg_xml">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/dialog_title"
        android:textSize="20sp"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="10dp"
        android:layout_marginBottom="10dp"
        android:text="撤銷出庫單"/>

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/dialog_message"
        android:textSize="14sp"
        android:layout_marginLeft="15dp"
        android:layout_marginBottom="45dp"
        android:text="肯定撤銷出庫單YT201405"/>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_marginLeft="10dp"
        android:layout_marginBottom="10dp"
        android:layout_marginRight="10dp">

        <Button
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="wrap_content"
            android:paddingTop="5dp"
            android:paddingBottom="5dp"
            android:text="取消"
            android:layout_marginRight="35dp"
            android:id="@+id/cancle_btn"
            android:background="@drawable/dialog_button_bg_xml"
            android:textSize="16sp"/>

        <Button
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="wrap_content"
            android:paddingTop="5dp"
            android:paddingBottom="5dp"
            android:text="肯定"
            android:id="@+id/ok_btn"
            android:background="@drawable/dialog_button_bg_xml"
            android:textSize="16sp"/>

    </LinearLayout>

</LinearLayout>
     MyDialog文件
 
package com.pass.view;

import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.TextView;

import hospitaltakeout.chuanyue.com.hospitaltakeout.R;

/**
 * Created by Administrator on 2016-07-12.
 */
public class MyDialog extends Dialog {
    private View view = null;
    private TextView title;
    private TextView message;
    private Button cancle;
    private Button ok;
    public MyDialog(Context context, View view) {
        super(context,R.style.MyDialog);
        this.view = view;
    }

    public MyDialog(Context context) {
        super(context,R.style.MyDialog);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (view == null){
            setContentView(R.layout.double_botton_layout);
            initView();
            setListener();
        }else{
            setContentView(view);
        }
    }

    private void initView(){
        title = (TextView) findViewById(R.id.dialog_title);
        message = (TextView) findViewById(R.id.dialog_message);
        cancle = (Button) findViewById(R.id.cancle_btn);
        ok = (Button) findViewById(R.id.ok_btn);
    }

    private void setListener(){
        cancle.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                MyDialog.this.dismiss();
            }
        });

        ok.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

            }
        });
    }

    public void setTitle(String str){
        title.setText(str);
    }

    public void setMessage(String str){
        message.setText(str);
    }

}
 
    最後在activity中使用的時候就像日常的dialog同樣使用就好;固然也可不在樣式中設置背景,而後在代碼中經過 getWindow().setBackgroundDrawable(new BitmapDrawable()); 或者getWindow().setBackgroundDrawableResource(android.R.color.transparent)來設置大體就是將原有背景設置透明,讓現有的背景顯現;
相關文章
相關標籤/搜索