Android--自定義Dialog,仿IOS對話方塊樣式
阿新 • • 發佈:2018-12-03
效果:
實現:
1.dialog_layout.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" android:orientation="vertical" android:background="@drawable/dialog_bg"> <!--對話方塊標題區域--> <RelativeLayout android:layout_width="280dp" android:layout_height="100dp" android:id="@+id/layout_title" android:gravity="center"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/title" android:text="11111" android:textColor="@color/black" android:gravity="center"/> </RelativeLayout> <!--對話方塊橫線--> <View android:layout_width="280dp" android:layout_height="1dp"android:background="@color/grey" android:layout_below="@+id/layout_title" android:layout_marginBottom="10dp"/> <!--對話方塊按鈕區域--> <RelativeLayout android:id="@+id/bottomoll" android:layout_width="280dp" android:layout_height="wrap_content" android:layout_below="@+id/layout_title"> <LinearLayout android:layout_width="280dp" android:layout_height="wrap_content"> <!--取消按鈕--> <Button android:id="@+id/btn_cancel" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="取消" android:textColor="@color/blue" android:background="@null" android:textSize="18sp" android:paddingTop="10dp" android:paddingBottom="10dp"/> <View android:layout_width="1dp" android:layout_height="match_parent" android:background="@color/grey"/> <!--退出按鈕--> <Button android:id="@+id/btn_exit" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="確定" android:textColor="@color/blue" android:background="@null" android:textSize="18sp"/> </LinearLayout> </RelativeLayout> </RelativeLayout>
2.在style.xml中設定dialog的樣式:
<!--對話方塊樣式--> <style name="mdialog" parent="android:style/Theme.Dialog"> <!-- 背景透明 --> <item name="android:windowBackground">@android:color/transparent</item> <!-- 沒有標題 --> <item name="android:windowNoTitle">true</item> <!-- 背景昏暗 --> <item name="android:backgroundDimEnabled">true</item> </style>
3.建立類繼承Dialog:
public class ConstomDialog extends Dialog { /**取消按鈕*/ private Button button_cancel; /**確認按鈕*/ private Button button_exit; /**標題文字*/ private TextView tv; //構造方法 public ConstomDialog(Context context) { super(context, R.style.mdialog); //通過LayoutInflater獲取佈局 View view = LayoutInflater.from(getContext()). inflate(R.layout.dialog_layout, null); tv = (TextView) view.findViewById(R.id.title); button_cancel = (Button) view.findViewById(R.id.btn_cancel); button_exit = (Button) view.findViewById(R.id.btn_exit); //設定顯示的檢視 setContentView(view); } /** * 設定顯示的標題文字 */ public void setTv(String content) { tv.setText(content); } /** * 取消按鈕監聽 * */ public void setOnCancelListener(View.OnClickListener listener){ button_cancel.setOnClickListener(listener); } /** * 退出按鈕監聽 * */ public void setOnExitListener(View.OnClickListener listener){ button_exit.setOnClickListener(listener); } }
4.使用ConstomDialog:
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //不顯示系統的標題欄, getWindow().setFlags( WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN ); setContentView(R.layout.activity_main); findViewById(R.id.tv_showDialog).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { showDialog(); } }); } /** * 彈出對話方塊 */ public void showDialog() { //例項化自定義對話方塊 final ConstomDialog mdialog = new ConstomDialog(this); //對話方塊中退出按鈕事件 mdialog.setOnExitListener(new View.OnClickListener() { @Override public void onClick(View v) { //如果對話方塊處於顯示狀態 if (mdialog.isShowing()) { //關閉對話方塊 mdialog.dismiss(); //關閉當前介面 finish(); } } }); //對話方塊中取消按鈕事件 mdialog.setOnCancelListener(new View.OnClickListener() { @Override public void onClick(View v) { if (mdialog != null && mdialog.isShowing()) { //關閉對話方塊 mdialog.dismiss(); } } }); mdialog.show(); } }