標籤:
今天我們學習的內容是實現兩種對話方塊(Dialog),第一種是詢問是否退出對話方塊,另外一種是帶表徵圖的列表對話方塊,程式的執行效果是,我們點擊button1的時候,彈出第一種對話方塊,我們點擊button2的時候,彈出另外一種對話方塊。
(1) 首先是布局方面,有三個xml檔案,一個是Activity的布局檔案,一個是Dialog的布局檔案,一個是ListView的布局檔案,內容分別例如以下:
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical"> <Button android:id="@+id/exit_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:text="對話方塊1"/> <Button android:id="@+id/list_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:text="對話方塊2"/></LinearLayout>
dialog_list.xml
<?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="match_parent" android:orientation="vertical" > <ListView android:id="@+id/listview" android:layout_width="fill_parent" android:layout_height="fill_parent" android:cacheColorHint="#00000000" > </ListView></LinearLayout>
items.xml
<?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="match_parent" android:orientation="horizontal" > <ImageView android:id="@+id/image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:adjustViewBounds="true" android:maxHeight="72px" android:maxWidth="72px" android:paddingBottom="20px" android:paddingLeft="10px" android:paddingTop="20px" /> <TextView android:id="@+id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:padding="10px" /></LinearLayout>
(2)然後就Java代碼部分,代碼部分關於dialog我已經具體凝視,具體請看:
package com.example.dialogdemo;import java.util.ArrayList;import java.util.HashMap;import android.app.Activity;import android.app.AlertDialog;import android.content.DialogInterface;import android.os.Bundle;import android.view.LayoutInflater;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.Button;import android.widget.ImageView;import android.widget.ListView;import android.widget.TextView;public class MainActivity extends Activity {//定義兩個靜態字串private static final String DIALOG_ICON = "icon";private static final String DIALOG_TITLE = "title";//聲明Button類型的變數button1private Button button1;//聲明Button類型的變數button2private Button button2;//聲明View類型的變數viewprivate View view;//聲明ListView類型的變數listViewprivate ListView listView;//聲明一個ArrayList變數mList,它裡面的item都是HashMap類型private ArrayList<HashMap<String, Object>> mList; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initData(); setupViews(); } /** * 初始化資料 */ private void initData(){ //初始化mList if(mList == null){ mList = new ArrayList<HashMap<String,Object>>(); }else{ mList.clear(); } //向mList裡面加入資料 HashMap<String, Object> map = new HashMap<String, Object>(); map.put(DIALOG_ICON, R.drawable.img01); map.put(DIALOG_TITLE, "程式管理"); mList.add(map); map = new HashMap<String, Object>(); map.put(DIALOG_ICON, R.drawable.img02); map.put(DIALOG_TITLE, "保密設定"); mList.add(map); map = new HashMap<String, Object>(); map.put(DIALOG_ICON, R.drawable.img03); map.put(DIALOG_TITLE, "安全設定"); mList.add(map); map = new HashMap<String, Object>(); map.put(DIALOG_ICON, R.drawable.img04); map.put(DIALOG_TITLE, "郵件設定"); mList.add(map); map = new HashMap<String, Object>(); map.put(DIALOG_ICON, R.drawable.img05); map.put(DIALOG_TITLE, "鈴聲設定"); mList.add(map); } /** * 初始化視圖 */ private void setupViews(){ LayoutInflater inflater = LayoutInflater.from(MainActivity.this);view = inflater.inflate(R.layout.dialog_list, null);listView = (ListView) view.findViewById(R.id.listview);DialogListViewAdapter adapter = new DialogListViewAdapter();listView.setAdapter(adapter); //通過findviewbyid()擷取Button對象 button1 = (Button) findViewById(R.id.exit_button); button2 = (Button) findViewById(R.id.list_button); //為button1設定點擊監聽器 button1.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {//初始化一個AlertDialog對象AlertDialog alertDialog = new AlertDialog.Builder(MainActivity.this).create();//為dialog設定表徵圖alertDialog.setIcon(getResources().getDrawable(R.drawable.advise));//為dialog設定標題alertDialog.setTitle("退出?");//為dialog設定主體內容alertDialog.setMessage("是否真的要退出當前應用?");//為dialog設定一個按鈕alertDialog.setButton(DialogInterface.BUTTON_NEGATIVE, "不退出", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {// TODO Auto-generated method stub}});//為dialog設定還有一個按鈕alertDialog.setButton(DialogInterface.BUTTON_POSITIVE, "是的", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {// TODO Auto-generated method stubMainActivity.this.finish();}});//顯示dialogalertDialog.show();}}); //為button2設定點擊監聽器 button2.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {//初始化一個AlertDialogAlertDialog alertDialog = new AlertDialog.Builder(MainActivity.this).create();//為alertDialog設定視圖alertDialog.setView(view);//顯示alertDialogalertDialog.show();}}); } /** *定義ListView的Adapter,其作用是為ListView視圖提供資料 */ class DialogListViewAdapter extends BaseAdapter{@Overridepublic int getCount() {return mList.size();}@Overridepublic Object getItem(int position) {return mList.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ListViewItemHolder holder;if(convertView == null){convertView = LayoutInflater.from(MainActivity.this).inflate(R.layout.items, null);holder = new ListViewItemHolder();holder.imageView = (ImageView) convertView.findViewById(R.id.image);holder.textView = (TextView) convertView.findViewById(R.id.title);convertView.setTag(holder);}else{holder = (ListViewItemHolder) convertView.getTag();}HashMap<String, Object> map = mList.get(position);int iconId = (Integer) map.get(DIALOG_ICON);String title = (String) map.get(DIALOG_TITLE);holder.imageView.setImageResource(iconId);holder.textView.setText(title);return convertView;} } //兩個視圖控制項的一個封裝類 class ListViewItemHolder{ ImageView imageView; TextView textView; } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main, menu); return true; }}
(3)執行一下android project,例如以下:
最後附上原始碼:
Android對話方塊(dialog)執行個體
Android實現“是否退出”對話方塊和“帶表徵圖的列表”對話方塊