Android之Dialog
阿新 • • 發佈:2018-06-14
Android Dialog 自定義 一 : UI設計
1 , Dialog(對話框)
1-1 : 新建 dialog_bay.xml , 方法 : 右擊“layout” -> new -> XML -> Layout XML File , 如下圖
1-2 : ui當中的重要的控件
①,(RadioGroup)rg_type : 單選按鈕組
①-1 : (RadioButton)rb_zfb : 支付寶
①-2 : (RadioButton)rb_wx : 微信
②, (Button)btn_ok : 確定按鈕
1-3 : 界面布局如下:
1 , Dialog(對話框)
1-1 : 新建 dialog_bay.xml , 方法 : 右擊“layout” -> new -> XML -> Layout XML File , 如下圖
1-2 : ui當中的重要的控件
①,(RadioGroup)rg_type : 單選按鈕組
①-1 : (RadioButton)rb_zfb : 支付寶
①-2 : (RadioButton)rb_wx : 微信
②, (Button)btn_ok : 確定按鈕
1-3 : 界面布局如下:
2,activity_main.xml(主界面UI)設計 2-1 : ui當中的重要的控件 ① , (Button) btn_pay : 確定支付 2-2 : 界面如下:
2-3 : 註意 , 為簡化起見,沒有放商品圖片 。這裏重點講解對話框
二 :代碼設計
①,DialogPay.java
package com.example.kayer.dialogdemo; import android.app.DialogFragment; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.os.Bundle; import android.support.annotation.Nullable; import android.util.Log; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.Window; import android.view.WindowManager; import android.widget.Button; import android.widget.RadioGroup; public final class DialogPay extends DialogFragment { private final String TAG = "測試Pay"; private View _contentView = null; private OnDialogPayListener _listener = null; public interface OnDialogPayListener{ void onDialogPayReturn( String $option ); } public void setOnDialogPayListener( OnDialogPayListener $listener ){ this._listener = $listener; } @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) { //創建View this._contentView = inflater.inflate( R.layout.dialog_pay , container); //點擊按鈕關閉對話框 Button $button = (Button)this._contentView.findViewById(R.id.btn_ok); $button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //關閉 DialogPay.this.dismiss(); //返回數據 DialogPay.this.returnInfos(); } }); return this._contentView; } public void returnInfos(){ RadioGroup $rg = (RadioGroup)this._contentView.findViewById(R.id.rg_type); int $rb_id = $rg.getCheckedRadioButtonId(); String $option = $rb_id == R.id.rb_zfb ? "支付寶" : "微信"; Log.d(this.TAG , "對話框選擇的支付方式: " + $option ); if(null != this._listener){ this._listener.onDialogPayReturn( $option ); } } @Override public void onStart() { super.onStart(); //當對話框顯示時 , 調整對話框的窗口位置 Window $win = getDialog().getWindow(); if( null != $win ){ $win.setBackgroundDrawable( new ColorDrawable(Color.WHITE)); //設置對話框的窗口顯示 WindowManager.LayoutParams $lp = $win.getAttributes(); $lp.dimAmount = 0.3f;//背景灰度 $lp.gravity = Gravity.BOTTOM;//靠下顯示 $lp.width = ViewGroup.LayoutParams.MATCH_PARENT; $lp.height = ViewGroup.LayoutParams.WRAP_CONTENT; $win.setAttributes($lp); } } }
註意 : DialogFragment 是出自 android.app.Dialogfragment 包
定義了一個類似與一個監聽器
② ,MainActivity.java
package com.example.kayer.dialogdemo; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.Toast; public class MainActivity extends AppCompatActivity { private Button btn_pay = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); this.init(); } private void init(){ this.btn_pay = (Button)findViewById(R.id.btn_pay); this.btn_pay.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { DialogPay $dl = new DialogPay(); $dl.setOnDialogPayListener(new DialogPay.OnDialogPayListener() { @Override public void onDialogPayReturn(String $option) { //處理對話框返回來的數據 Toast.makeText(MainActivity.this, "對話框返回的數據:" + $option, Toast.LENGTH_SHORT).show(); } }); $dl.show(getFragmentManager(),"DialogPay"); } }); } }
註意 , 為對話框註冊監聽器
Android之Dialog