簡單的作法可以參考 [Android] AlertDialog-嵌入客製化表單
在 AlertDialog 中加入 EditText,不過上面沒有取得 EditText 內容的方法
下面是我的 code:
public class customizeDialog extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.addPreferencesFromResource(R.xml.app_settings);
Preference prefBackup = this.findPreference(this.Pref_Backup);
prefBackup.setOnPreferenceClickListener(this.onPrefClick);
}
//--------------------------------------------------------//
//------------------------ events ------------------------//
//--------------------------------------------------------//
public OnPreferenceClickListener onPrefClick = new OnPreferenceClickListener() {
public boolean onPreferenceClick(Preference pref) {
// TODO Auto-generated method stub
if(pref.getKey().compareTo("dialogWithEditText") == 0)
showDialog(R.id.dialogEdit);
return false;
}
};
public Dialog onCreateDialog(int id) {
Dialog dialog = null;
switch (id) {
case R.id.dialogEdit:
AlertDialog.Builder builder = new AlertDialog.Builder(AppSettings.this);
// 取得 View
LayoutInflater inf = LayoutInflater.from(AppSettings.this);
View linear = inf.inflate(R.layout.dialog_with_edittext, null);
builder.setView(linear);
// 設定輸入框
final EditText edit = (EditText) linear.findViewById(R.id.dialogEdit);
builder.setPositiveButton("確定", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface arg0, int arg1) {
// TODO Auto-generated method stub
Toast.makeText(customizeDialog.this, "輸入" + edit.getText(), Toast.LENGTH_SHORT).show();
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface arg0, int arg1) {
// TODO Auto-generated method stub
Toast.makeText(customizeDialog.this, "按下取消按鈕", Toast.LENGTH_SHORT).show();
}
});
builder.setTitle("對話框標題");
builder.setMessage("對話框文字");
dialog = builder.create();
break;
}
return dialog;
}
}這是用了 onCreateDialog( ) 跟 showDialog( ) 函式的顯示對話框的方式。
順道提一下,原本沒有用這個的時候一直出現奇怪的錯誤訊息 XD
像是 WindowsManager ..... 什麼的 Exception~
記一下原本一直出錯的程式碼:
public class customizeDialog extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.addPreferencesFromResource(R.xml.app_settings);
Preference prefBackup = this.findPreference(this.Pref_Backup);
prefBackup.setOnPreferenceClickListener(this.onPrefClick);
}
//--------------------------------------------------------//
//------------------------ events ------------------------//
//--------------------------------------------------------//
public OnPreferenceClickListener onPrefClick = new OnPreferenceClickListener() {
public boolean onPreferenceClick(Preference pref) {
// TODO Auto-generated method stub
if(pref.getKey().compareTo("dialogWithEditText") == 0) {
AlertDialog.Builder builder = new AlertDialog.Builder(AppSettings.this);
// 取得 View
LayoutInflater inf = LayoutInflater.from(AppSettings.this);
View linear = inf.inflate(R.layout.dialog_with_edittext, null);
builder.setView(linear);
// 設定輸入框
final EditText edit = (EditText) linear.findViewById(R.id.dialogEdit);
builder.setPositiveButton("確定", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface arg0, int arg1) {
// TODO Auto-generated method stub
Toast.makeText(customizeDialog.this, "輸入" + edit.getText(), Toast.LENGTH_SHORT).show();
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface arg0, int arg1) {
// TODO Auto-generated method stub
Toast.makeText(customizeDialog.this, "按下取消按鈕", Toast.LENGTH_SHORT).show();
}
});
builder.setTitle("對話框標題");
builder.setMessage("對話框文字");
dialog = builder.create();
}
}
}
}兩種寫法的差別就是上面的是把建立 Dialog 的語法寫在 onCreateDialog 裡
下面則是直接寫在 onPreferenceClick 裡(會出現錯誤)
沒有留言:
張貼留言