採用AlertDialog的自定義佈局方式實現設置交互,新建android layout佈局後,採用LayoutInflater是用來得到佈局文件對象,經過AlertDialog.Builder.setView().show()方式實現自定義佈局對話框的打開。比起以前「開發webapp的準備工做」中使用intent打開一個activity的方式,AlertDialog實現更輕鬆,交互更友好。android
新建android xml layout fileweb
New – android – android xml layout file – 名稱爲「layout_set」,實現OA的訪問地址、是否須要提醒、是否須要聲音提醒、振動提醒等設置。這裏我用了一個TableLayout,加入一個EditText和3個Checkbox。代碼以下:app
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"webapp
android:id="@+id/TableLayout1"佈局
android:layout_width="match_parent"ui
android:layout_height="match_parent"this
android:orientation="vertical" >url
<TextViewxml
android:id="@+id/textView1"對象
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="登錄網址" />
<EditText
android:id="@+id/editText_url"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10" >
<requestFocus />
</EditText>
<CheckBox
android:id="@+id/checkBox_alert"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="有消息是否提醒" />
<CheckBox
android:id="@+id/checkBox_vibrate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="振動提醒" />
<CheckBox
android:id="@+id/checkBox_sound"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="聲音提醒" />
</TableLayout>
這裏將用AlertDialog方式打開,不須要增長button。
打開AlertDialog
在菜單onOptionsItemSelected的「設置」部分增長打開的代碼,並實現讀取EditText和CheckBox的值,採用SharedPreferences保存。CheckBox是否被選中用isChecked() ,選中用setChecked(Boolean)。alertDialog的建立代碼以下,其中「layout_set」是我建立的佈局文件名稱,「TableLayout1」是佈局文件的layout id。爲了能在「肯定」的OnClickListener匿名內部類中調用外部變量dialogLayout,dialogLayout須要用final修飾.
LayoutInflater inflater = getLayoutInflater();
final View dialogLayout = inflater.inflate(R.layout.layout_set, (ViewGroup)findViewById(R.id.TableLayout1));
new AlertDialog.Builder(this).setTitle("設置").setView(dialogLayout)
.setPositiveButton("肯定", new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
//得到EditText和CheckBox的值,採用SharedPreferences保存。
dialog.dismiss();
}
})
.setegativeButton("取消", null).show();
關於AlertDialog
我曾經嘗試在AlertDialog.Builder builder = new AlertDialog.Builder(this);以後,一口氣加完setTitle、setMessage、setView(EditText)、setMultiChoiceItems、setSingleChoiceItems、setItems,結果只出現EditText,而沒有單選多選,研究後發如今 AlertDialog中setMessage、setMultiChoiceItems等只能一個有效,所以複雜的交互內容只能用setView的自定義佈局方式。