安卓自定義彈框(Dialog)
阿新 • • 發佈:2018-12-19
1.在style檔案中建立一個style
<style name="dialog" parent="@android:style/Theme.Dialog"> <item name="android:windowFrame">@null</item><!-- 邊框--> <item name="android:windowIsFloating">true</item><!--是否顯示在activity之上--> <item name="android:windowNoTitle">true</item><!--沒有標題--> <item name="android:windowContentOverlay">@null</item> <item name="android:backgroundDimEnabled">true</item> <item name="android:windowIsTranslucent">false</item> <item name="android:windowBackground">@color/colorTransparent</item><!--背景顏色透明--> <item name="android:background">@color/colorTransparent</item><!--背景透明--> <item name="android:backgroundDimAmount">0.5</item> </style>
2.在layout檔案中建立money_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="150dp" android:orientation="vertical" android:background="@drawable/repeat_drawable"> <TextView android:layout_width="match_parent" android:layout_height="50dp" android:gravity="center" android:textColor="@color/colorBlack" android:textSize="19dp" android:text="總金額" /> <TextView android:layout_width="match_parent" android:layout_height="2dp" android:background="@color/colorLightGray"/> <EditText android:id="@+id/name_editText" android:layout_width="match_parent" android:layout_marginTop="25dp" android:layout_marginLeft="40dp" android:layout_marginRight="40dp" android:layout_height="40dp" android:focusable="auto" android:gravity="center" android:inputType="number" android:background="@drawable/name_edit_shape"/> <Button android:id="@+id/sure_btn" android:layout_marginTop="20dp" android:layout_marginBottom="20dp" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginLeft="40dp" android:layout_marginRight="40dp" android:textColor="@color/colorMian" android:gravity="center" android:textSize="18dp" android:text="確定" android:background="@null"/> </LinearLayout>
3.建立MoneyDialog類繼承自Dialog
public class MoneyDialog extends Dialog implements View.OnClickListener { private Context context; private EditText money_text; private Button sure_button; private SureOnlickLisenter lisenter; public MoneyDialog(@NonNull Context context) { super(context, R.style.dialog); this.context = context; initView(); bindViews(); } public void setLisenter(SureOnlickLisenter lisenter) { this.lisenter = lisenter; } private void initView() { LayoutInflater inflater = (LayoutInflater)context.getSystemService(context.LAYOUT_INFLATER_SERVICE); View view = inflater.inflate(R.layout.money_dialog,null); Window window = this.getWindow(); if (window!=null){ window.setGravity(Gravity.CENTER); } setContentView(view); } private void bindViews() { money_text = findViewById(R.id.name_editText); sure_button = findViewById(R.id.sure_btn); sure_button.setOnClickListener(this); } @Override public void onClick(View view) { String money = money_text.getText().toString(); if (money.length()>0){ lisenter.sureOnlcik(Float.valueOf(money)); dismiss(); }else { Toast.makeText(context,"請輸入金額",Toast.LENGTH_SHORT).show(); } } public interface SureOnlickLisenter{ void sureOnlcik(float money); } }
super(context, R.style.dialog);設定Dialog的style否則會使用系統預設的帶標題帶框的格式。
在類方法中建立Dialog的view也就是initView方法。
另外該提示框需要傳遞資料所以聲明瞭一個介面
public interface SureOnlickLisenter{ void sureOnlcik(float money); }
4.在Activity或Fragment中呼叫
private void showMoneyDialog(){
MoneyDialog dialog = new MoneyDialog(context);
dialog.show();
Window dialogWindow = dialog.getWindow();
WindowManager.LayoutParams params = dialogWindow.getAttributes();
params.width = WindowManager.LayoutParams.MATCH_PARENT;
dialogWindow.getDecorView().setPadding(40,0,40,0);
dialogWindow.setAttributes(params);
dialog.setLisenter(new MoneyDialog.SureOnlickLisenter() {
@Override
public void sureOnlcik(float money) {
}
});
}
點選彈框的確定按鈕則Activity中會執行sureOnlcik方法並且獲取彈框中輸入的資料。