Android實現(xiàn)可輸入數(shù)據(jù)的彈出框
之前一篇文章,介紹了如何定義從屏幕底部彈出PopupWindow即《Android Animation實戰(zhàn)之屏幕底部彈出PopupWindow》,寫完之后,突然想起之前寫過自定義內容顯示的彈出框,就隨手寫了兩個實例,分享出來:

第一種實現(xiàn)方式:繼承Dialog
1.1 線定義彈出框要顯示的內容:create_user_dialog.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/create_user_dialog_view" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@drawable/dialog_load_bg" android:minWidth="200dp" android:orientation="vertical" android:padding="10dp" android:paddingBottom="30dp" android:paddingTop="30dp"> <EditText android:id="@+id/text_name" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@drawable/edit_bg" android:hint="姓名" android:minHeight="45dp" android:textSize="18sp" /> <EditText android:id="@+id/text_mobile" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="5dp" android:background="@drawable/edit_bg" android:hint="手機號" android:minHeight="45dp" android:textSize="18sp" /> <EditText android:id="@+id/text_info" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="5dp" android:background="@drawable/edit_bg" android:gravity="top|left" android:hint="個性簽名" android:minHeight="145dp" android:textSize="18sp" /> <Button android:id="@+id/btn_save_pop" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="5dp" android:text="保存" /> </LinearLayout>
1.2 定義要彈出的Dialog
public class CreateUserDialog extends Dialog {
/**
* 上下文對象 *
*/
Activity context;
private Button btn_save;
public EditText text_name;
public EditText text_mobile;
public EditText text_info;
private View.OnClickListener mClickListener;
public CreateUserDialog(Activity context) {
super(context);
this.context = context;
}
public CreateUserDialog(Activity context, int theme, View.OnClickListener clickListener) {
super(context, theme);
this.context = context;
this.mClickListener = clickListener;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 指定布局
this.setContentView(R.layout.create_user_dialog);
text_name = (EditText) findViewById(R.id.text_name);
text_mobile = (EditText) findViewById(R.id.text_mobile);
text_info = (EditText) findViewById(R.id.text_info);
/*
* 獲取圣誕框的窗口對象及參數(shù)對象以修改對話框的布局設置, 可以直接調用getWindow(),表示獲得這個Activity的Window
* 對象,這樣這可以以同樣的方式改變這個Activity的屬性.
*/
Window dialogWindow = this.getWindow();
WindowManager m = context.getWindowManager();
Display d = m.getDefaultDisplay(); // 獲取屏幕寬、高用
WindowManager.LayoutParams p = dialogWindow.getAttributes(); // 獲取對話框當前的參數(shù)值
// p.height = (int) (d.getHeight() * 0.6); // 高度設置為屏幕的0.6
p.width = (int) (d.getWidth() * 0.8); // 寬度設置為屏幕的0.8
dialogWindow.setAttributes(p);
// 根據(jù)id在布局中找到控件對象
btn_save = (Button) findViewById(R.id.btn_save);
// 為按鈕綁定點擊事件監(jiān)聽器
btn_save.setOnClickListener(mClickListener);
this.setCancelable(true);
}
}
1.3 調用彈出框
public void showEditDialog(View view) {
createUserDialog = new CreateUserDialog(this,R.style.loading_dialog,onClickListener);
createUserDialog.show();
}
private View.OnClickListener onClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_save:
String name = createUserDialog.text_name.getText().toString().trim();
String mobile = createUserDialog.text_mobile.getText().toString().trim();
String info = createUserDialog.text_info.getText().toString().trim();
System.out.println(name+"——"+mobile+"——"+info);
break;
}
}
};
第二種實現(xiàn)方式:繼承PopupWindow
2.1 定義彈出框布局文件,和1.1定義的一致
2.2 定義要彈出的PopupWindow
public class CreateUserPopWin extends PopupWindow {
private Context mContext;
private View view;
private Button btn_save_pop;
public EditText text_name;
public EditText text_mobile;
public EditText text_info;
public CreateUserPopWin(Activity mContext, View.OnClickListener itemsOnClick) {
this.mContext = mContext;
this.view = LayoutInflater.from(mContext).inflate(R.layout.create_user_pop, null);
text_name = (EditText) view.findViewById(R.id.text_name);
text_mobile = (EditText) view.findViewById(R.id.text_mobile);
text_info = (EditText) view.findViewById(R.id.text_info);
btn_save_pop = (Button) view.findViewById(R.id.btn_save_pop);
// 設置按鈕監(jiān)聽
btn_save_pop.setOnClickListener(itemsOnClick);
// 設置外部可點擊
this.setOutsideTouchable(true);
/* 設置彈出窗口特征 */
// 設置視圖
this.setContentView(this.view);
// 設置彈出窗體的寬和高
/*
* 獲取圣誕框的窗口對象及參數(shù)對象以修改對話框的布局設置, 可以直接調用getWindow(),表示獲得這個Activity的Window
* 對象,這樣這可以以同樣的方式改變這個Activity的屬性.
*/
Window dialogWindow = mContext.getWindow();
WindowManager m = mContext.getWindowManager();
Display d = m.getDefaultDisplay(); // 獲取屏幕寬、高用
WindowManager.LayoutParams p = dialogWindow.getAttributes(); // 獲取對話框當前的參數(shù)值
this.setHeight(RelativeLayout.LayoutParams.WRAP_CONTENT);
this.setWidth((int) (d.getWidth() * 0.8));
// 設置彈出窗體可點擊
this.setFocusable(true);
}
}
2.3 調用該彈框組件
public void showEditPopWin(View view) {
createUserPopWin = new CreateUserPopWin(this,onClickListener);
createUserPopWin.showAtLocation(findViewById(R.id.main_view), Gravity.CENTER, 0, 0);
}
private View.OnClickListener onClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_save_pop:
String name1 = createUserPopWin.text_name.getText().toString().trim();
String mobile1 = createUserPopWin.text_mobile.getText().toString().trim();
String info1 = createUserPopWin.text_info.getText().toString().trim();
System.out.println(name1+"——"+mobile1+"——"+info1);
createUserPopWin.dismiss();
break;
}
}
};
以上就是本文的全部內容,希望對大家的學習Android有所幫助。
相關文章
android studio 4.0 新建類沒有修飾符的方法
這篇文章主要介紹了android studio 4.0 新建類沒有修飾符的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-10-10
自定義視圖view使用Canvas實現(xiàn)手寫板和涂鴉功能
這篇文章主要介紹了自定義視圖view使用Canvas實現(xiàn)手寫板和涂鴉功能,這里直接上代碼,里面有詳細講解和注釋,需要的朋友可以參考下2023-04-04
Android游戲開發(fā)實踐之人物移動地圖的平滑滾動處理
玩過rpg游戲的朋友應該都知道RPG的游戲地圖一般都比較大 今天我和大家分享一下在RPG游戲中如何來處理超出手機屏幕大小的游戲地圖。2014-06-06
Android中@id和@+id及@android:id的區(qū)別介紹
這篇文章主要給大家介紹了關于Android中@id和@+id及@android:id的區(qū)別的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-09-09
Android?Flutter使用本地數(shù)據(jù)庫編寫備忘錄應用
這篇文章主要為大家詳細介紹了Android?Flutter如何使用本地數(shù)據(jù)庫實現(xiàn)編寫簡單的備忘錄應用,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下2023-03-03

