當前位置:首頁 > 資訊 > info6 > 正文

Dialog及Menu

發表于: 2017-01-09   作者:Chen_xiaobao   來源:轉載   瀏覽:
摘要: 今天給大家總結了一些關于dialog的使用:給大家進行了分類:(如果感覺不錯的話,點一下關注,謝謝大家的支持)一、Dialog對話框:(一)、分類:AlertDialog??警告對話框(提示對話框)ProgressDialog??進度對話框DatePickerDialog??日期選擇對話框TimePickerDialog??時間選擇對話框自定義對話框(登錄對話框、關于對話框)列表對話框普通列表對話

今天給大家總結了一些關于dialog的使用:


給大家進行了分類:(如果感覺不錯的話,點一下關注,謝謝大家的支持)

一、Dialog對話框:
(一)、分類:
  1. AlertDialog   警告對話框(提示對話框)
  2. ProgressDialog    進度對話框
  3. DatePickerDialog   日期選擇對話框
  4. TimePickerDialog   時間選擇對話框
  5. 自定義對話框登錄對話框、關于對話框)
  6. 列表對話框
    • 普通列表對話框
    • 單選列表對話框
    • 多選列表對話框
    • 帶圖標的列表對話框
(二)、AlertDialog ——簡單對話框: 
1、類結構:
java.lang.Object
   ?  android.app.Dialog
      ?  android.app.AlertDialog
 
2、創建AlertDialog對話框的步驟
  1. 創建AlertDialog.Builder對象,該對象能創建AlertDialog;
  2. 調用Builder對象的方法設置圖標、標題、內容、按鈕等;
    • setTitle():為對話框設置標題
    • setIcon ():設置圖標
    • setMessage ():設置要顯示的信息
    • setNegativeButton ():設置取消按鈕
    • setPositiveButton ():設置確定按鈕
    • setNeutralButton ():設置中立按鈕
  3. 調用Builder對象的create()方法創建AlertDialog對話框;
  4. 調用AlertDialog的show()方法來顯示對話框。
3、核心代碼:
Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setIcon(R.drawable.ic_launcher);
builder.setTitle("提示");
builder.setMessage("確認退出嗎?");
builder.setPositiveButton("確認", new OnClickListener() {

        @Override
        public void onClick(DialogInterface dialog, int which) {
                text_main_info.setText("您點擊了:" + which);
        }
});
builder.setNegativeButton("取消", new OnClickListener() {

        @Override
        public void onClick(DialogInterface dialog, int which) {
                text_main_info.setText("您點擊了:" + which);
        }
});
builder.setNeutralButton("中立", new OnClickListener() {

        @Override
        public void onClick(DialogInterface dialog, int which) {
                text_main_info.setText("您點擊了:" + which);
        }
});
builder.create().show();

(三)、AlertDialog——列表對話框:
1、類結構:
java.lang.Object
   ?  android.app.Dialog
      ?  android.app.AlertDialog
 
2、創建列表AlertDialog對話框的步驟
  1. 創建AlertDialog.Builder對象,該對象能創建AlertDialog;
  2. 調用Builder對象的方法設置圖標、標題、內容、按鈕等;
    • setTitle():為對話框設置標題
    • setIcon ():設置圖標
    • setMessage ():設置要顯示的信息
    • setNegativeButton ():設置取消按鈕
    • setPositiveButton ():設置確定按鈕
    • setNeutralButton ():設置中立按鈕
    • setItems ():為對話框添加列表項
    • setSingleChoiceItems ():為對話框添加單選列表項
    • setMultiChoiceItems ():為對話框添加多選列表項
    • setAdapter ():為對話框添加帶圖標的列表項
  3. 調用Builder對象的create()方法創建AlertDialog對話框;
  4. 調用AlertDialog的show()方法來顯示對話框。
3、核心代碼:
【備注:使用setItems ()、setSingleChoiceItems ()、setMultiChoiceItems () 、setAdapter()能得到不同的結果。】
//A. 普通列表
button_main_simpleListDialog.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
                Builder builder = new AlertDialog.Builder(MainActivity.this);
                builder.setIcon(R.drawable.ic_launcher);
                builder.setTitle("請選擇顏色:");
                final String[] arrColor = new String[] { "紅色", "綠色","藍色" };
                // 往對話框中放置普通列表
                builder.setItems(arrColor, new OnClickListener() {
                        // 以下代碼是模擬:勾選選項后,文字顏色和文本框背景顏色相應發生改變
                        @Override
                        public void onClick(DialogInterface dialog , int which) {
                                text_main_info.setText(arrColor[which]);
                                switch (which) {
                                case 0:
                                        text_main_info.setBackgroundColor(Color.RED);
                                        break;
                                case 1:
                                        text_main_info.setBackgroundColor(Color.GREEN);
                                        break;
                                case 2:
                                        text_main_info.setBackgroundColor(Color.BLUE);
                                        break;
                                default:
                                        break;
                                }
                        }
                });
                builder.show();
        }
});

//B. 單選列表
button_main_singleListDialog
.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
                Builder builder = new AlertDialog.Builder(MainActivity.this);
                builder.setIcon(R.drawable.ic_launcher);
                builder.setTitle("請選擇顏色:");
                final String[] arrColor = new String[] { "紅色", "綠色","藍色" };
                // 往對話框中放置單選列表
                builder.setSingleChoiceItems(arrColor, 0,
                                new OnClickListener() {

                                        @Override
                                        public void onClick(DialogInterface dialog,int which) {
                                                position = which;//通過這個監聽器獲取到點擊的是第幾個
                                        }
                                });
                builder.setPositiveButton("確認", new OnClickListener() {

                        @Override
                        public void onClick(DialogInterface dialog,int which) {
                                text_main_info.setText(arrColor[position]);
                                switch (position) {
                                case 0:
                                        text_main_info.setBackgroundColor(Color.RED);
                                        break;
                                case 1:
                                        text_main_info.setBackgroundColor(Color.GREEN);
                                        break;
                                case 2:
                                        text_main_info.setBackgroundColor(Color.BLUE);
                                        break;
                                default:
                                        break;
                                }
                        }
                });
                builder.show();
        }
});

//C. 多選列表
button_main_multiListDialog
.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
                Builder builder = new AlertDialog.Builder(MainActivity.this);
                builder.setIcon(R.drawable.ic_launcher);
                builder.setTitle("請選擇顏色:");
                final String[] hobbyArr = new String[] { "看書", "學習","飲食", "爬山", "繪畫" };
                // 將多選項中每次勾選的結果放到一個pos數組中。
                pos = new boolean[hobbyArr.length];
                // 往對話框中放置多選列表
                builder.setMultiChoiceItems(hobbyArr, null,
                                new OnMultiChoiceClickListener() {

                                        @Override
                                        public void onClick(DialogInterface dialog,int which, boolean isChecked) {
                                                pos[which] = isChecked;//將每一項被勾選的狀態放到一個boolean型的數組中
                                        }
                                });
                // 多選列表項必須要使用確認按鈕才能最終獲得所有勾選的數據。
                builder.setPositiveButton("確認", new OnClickListener() {

                        @Override
                        public void onClick(DialogInterface dialog,int which) {
                                // 將所有的勾選項放到一個字符串中
                                StringBuilder sb = new StringBuilder();
                                for (int i = 0; i < pos.length; i++) {
                                        if (pos[i]) {
                                                sb.append(hobbyArr[i]);
                                                sb.append("、");
                                        }
                                }
                                text_main_info.setText("您勾選了:" + sb.toString());
                        }
                });
                builder.show();
        }
});

//D. 帶圖標的列表dialog
button_main_adapterListDialog
.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
                Builder builder = new AlertDialog.Builder(MainActivity.this);
                builder.setIcon(R.drawable.ic_launcher);
                builder.setTitle("手機設置:");

                // 定義數據源。以下是模擬數據。真實工作中,有可能是從網絡上獲取數據,也有可能是從xml配置文件中獲取數據。
                // 考慮到后期維護,很少在java文件中以定義數組的形式作為適配器的數據來源。
                List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
                for (int i = 0; i < settingArr.length; i++) {
                        Map<String, Object> map = new HashMap<String, Object>();
                        map.put("settingType", settingArr[i]);
                        map.put("imageId", imageId[i]);
                        list.add(map);
                }
                // 使用SimpleAdapter將數據源和自定義布局文件結合到一起。
                SimpleAdapter adapter = new SimpleAdapter(
                                MainActivity.this, list, R.layout.item_dialog,
                                new String[] { "settingType", "imageId" },
                                new int[] { R.id.text_item_dialog,
                                                R.id.imageView_item_dialog });
                // 調用builder的setAdapter()方法將適配器加載到對話框中。
                builder.setAdapter(adapter, new OnClickListener() {

                        @Override
                        public void onClick(DialogInterface dialog,int which) {
                                text_main_info.setText("您選擇設置:" + settingArr[which]);
                        }
                });
                // 顯示對話框
                builder.show();
        }
});

(四)、AlertDialog——自定義對話框:
1、類結構:
java.lang.Object
   ?  android.app.Dialog
      ?  android.app.AlertDialog
 
2、創建自定義AlertDialog對話框的步驟
  1. 創建AlertDialog.Builder對象,該對象能創建AlertDialog;
  2. 調用Builder對象的方法設置圖標、標題、內容、按鈕等;
  • setTitle():為對話框設置標題
  • setIcon ():設置圖標
  • setMessage ():設置要顯示的信息
  • setNegativeButton ():設置取消按鈕
  • setPositiveButton ():設置確定按鈕
  • setNeutralButton ():設置中立按鈕
  1. 自定義布局文件;
  2. 使用LayoutInflater  inflater()方法填充自定義的布局文件,返回view對象。用該對象的findViewById()方法加載自定義布局上所有控件;
  3. 調用Builder對象的setView()方法加載view對象;
  4. 調用Builder對象的create()方法創建AlertDialog對話框;
  5. 調用AlertDialog的show()方法來顯示對話框。
3、核心代碼:本示例代碼中寫了一個顯示登錄窗口的登錄框。
【備注:】采用LayoutInflater去填充布局,返回view對象。
View view = null;
Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setIcon(R.drawable.ic_launcher);
builder.setTitle("管理員登錄:");
LayoutInflater mInflater = LayoutInflater.from(MainActivity.this);
view = mInflater.inflate(R.layout.loginform_main, null);
final EditText edit_loginform_username = (EditText) view
                .findViewById(R.id.edit_loginform_username);
final EditText edit_loginform_password = (EditText) view
                .findViewById(R.id.edit_loginform_password);
builder.setView(view);
builder.setPositiveButton("登錄", new OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
                String username = edit_loginform_username.getText()
                                .toString().trim();
                String password = edit_loginform_password.getText()
                                .toString().trim();
                if (username.length() < 1 || password.length() < 1) {
                        text_main_info.setText("用戶名或密碼不可以為空!");
                } else {
                        StringBuilder sb = new StringBuilder();
                        sb.append("您的登錄信息:");
                        sb.append("用戶名:");
                        sb.append(username);
                        sb.append("密碼:");
                        sb.append(password);
                        text_main_info.setText(sb.toString());
                }
        }
});
builder.setNegativeButton("取消", new OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
                //此處進行異步任務訪問網絡等處理。
        }
});
builder.create().show();



(五)、ProgressDialog——進度對話框:
1、類結構:
java.lang.Object
   ?  android.app.Dialog
      ?  android.app.AlertDialog
         ?  android.app.ProgressDialog
 
2、創建 ProgressDialog 對話框的步驟:
  • 實例化ProgressDialog,創建出ProgressDialog對象;
  • 調用該對象的方法設置圖標、標題、內容、按鈕等;
  • setTitle():為對話框設置標題setIcon ():設置圖標setMessage ():設置要顯示的信息
  • 調用 ProgressDialog 對象的show()方法顯示出 ProgressDialog 對話框。
3、核心代碼:
ProgressDialog pDialog = new ProgressDialog(MainActivity.this);
pDialog.setTitle("提示:");
pDialog.setMessage("數據加載中。。。");
pDialog.show();

(六)、DatePickerDialog——日期選擇對話框:
1、類結構:
java.lang.Object
   ?  android.app.Dialog
      ?  android.app.AlertDialog
         ?  android.app.DatePickerDialog
 
2、創建 DatePickerDialog 對話框的步驟:
  • 實例化 DatePickerDialog  ,創建出 DatePickerDialog  對象;
  • 調用  DatePickerDialog  對象的show()方法顯示出  DatePickerDialog  對話框;
  • 綁定監聽器:OnDateSetListener().
3、核心代碼:
// 獲取系統當前日期
Calendar calendar = Calendar.getInstance();
DatePickerDialog datePickerDialog = new DatePickerDialog(
                MainActivity.this, new OnDateSetListener() {

                        @Override
                        public void onDateSet(DatePicker view,
                                        int year, int monthOfYear,
                                        int dayOfMonth) {
                                text_main_info.setText("您選擇了:" + year
                                                + ":" + (monthOfYear + 1) + ":"
                                                + dayOfMonth);
                        }
                }, calendar.get(Calendar.YEAR), calendar
                                .get(Calendar.MONTH), calendar
                                .get(Calendar.DAY_OF_MONTH));
datePickerDialog.setCancelable(true);
datePickerDialog.show();

二、OptionMenu選項菜單:

(一)、簡介:
1、Android應用中的菜單默認是隱藏的,只有當用戶點擊手機上的MENU鍵,系統才會顯示菜單。這種菜單叫做選項菜單(Option Menu)。
2、從3.0開始,Android不要求手機設備上必須提供MENU按鍵。因此Android推薦使用ActionBar來代替Menu。

(二)、創建菜單:(Android提供了兩種創建菜單的方式)
1、在java代碼創建菜單;
2、使用xml資源文件創建菜單(res/menu目錄下)。建議使用后者。


(三)、XML資源文件中定義菜單:
1、普通菜單:
 <item
        android:id="@+id/menu_about"
        android:orderInCategory="2"
        android:showAsAction="never"
        android:title="關于"/>

2、二級普通菜單:
 <item
        android:id="@+id/menu_group2"
        android:orderInCategory="1"
        android:showAsAction="never"
        android:title="文字顏色">
        <menu >
            <group>
                <item android:id="@+id/font_red" android:title="red" />
                <item android:id="@+id/font_green" android:title="green"></item>
                <item android:id="@+id/font_blue" android:title="blue"></item>
                <item android:id="@+id/font_yellow" android:title="yellow"></item>
            </group>
        </menu>
    </item>

3、二級可選項菜單:
 <item
        android:id="@+id/menu_group1"
        android:orderInCategory="1"
        android:showAsAction="never"
        android:title="文字尺寸">
        <menu >
            <!-- android:checkableBehavior 屬性有三個可選值:all為多選,single為單選,none為不可選。為none時就是一個普通菜單 -->
            <group android:checkableBehavior="single">
                <item android:id="@+id/font_10" android:title="10sp"></item>
                <item android:id="@+id/font_15" android:title="15sp"></item>
                <item android:id="@+id/font_20" android:title="20sp"></item>
                <item android:id="@+id/font_25" android:title="25sp"></item>
                <item android:id="@+id/font_30" android:title="30sp"></item>
            </group>
        </menu>
    </item>


(四)、菜單操作:
            利用boolean onOptionsItemSelected(MenuItem item)回調方法。

核心代碼如下:利用以上定義的xml菜單文件,實現通過菜單選項對文字的大小和顏色進行控制。
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
                switch (item.getItemId()) {
                case R.id.font_20:
                        text_main_info.setTextSize(20);
                        break;
                case R.id.font_30:
                        text_main_info.setTextSize(30);
                        break;
                case R.id.font_red:
                        text_main_info.setTextColor(Color.RED);
                        break;
                case R.id.font_green:
                        text_main_info.setTextColor(Color.GREEN);
                        break;
                }
                return super.onOptionsItemSelected(item);
        }


三、ContextMenu  上下文菜單
(一)、上下文菜單介紹:上下文菜單繼承自android.view.Menu。

1、上下文菜單與Options Menu最大的不同在于:

  • Options Menu的擁有者是Activity,而上下文菜單的擁有者是Activity中的View;
  • 每個Activity有且只有一個Options Menu,它為整個Activity服務。而一個Activity往往有多個View,哪個View需要上下文菜單就通過registerForContextMenu(View view)給這個View注冊上下文菜單。

2、生成上下文菜單是通過Activity中的onCreateContextMenu()方法:

  • onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo)方法很像生成Options Menu的onCreateOptionsMenu(Menu menu)方法;
  • 兩者的不同在于:onCreateOptionsMenu只在用戶第一次按“Menu”鍵時被調用,而onCreateContextMenu會在用戶每一次長按注冊了上下文菜單的View時被調用。
3、ContextMenu工作原理圖:

4、ContextMenuInfo 有什么用呢?
當視圖元素需要向上下文菜單傳遞一些信息,比如該View對應DB記錄的id等,這就要使用ContextMenuInfo。需要傳遞額外信息的View需要重寫getContextMenuInfo()方法,返回一個帶有數據的ContextMenuInfo實現類對象。

Additional information regarding the creation of the context menu. For example, AdapterViews use this to pass the exact item position within the adapter that initiated the context menu.

ContextMenuInfo攜帶了注冊上下文菜單控件的一些額外信息。一般用在AdaterViews(例如:Spinner 、ListView或GridView)上,
可以在ContextMenuInfo 中獲取到適配器View中的position的信息


(二)、開發上下文菜單的步驟:

1、重寫onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo)方法;
2、調用Activity的registerForContextMenu(View view)方法為view組件注冊上下文菜單;(注冊上下文菜單后,意味著用戶長按該控件后顯示上下文菜單)。
3、為菜單項提供響應,重寫onContextItemSelected(MenuItem item)。


(三)、示例代碼:
 private TextView text_main_info;

@Override
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        text_main_info = (TextView) findViewById(R.id.text_main_info);
        this.registerForContextMenu(text_main_info);
}

@Override
public void onCreateContextMenu(ContextMenu menu, View v,
                ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
        getMenuInflater().inflate(R.menu.contextmenu_main, menu);
}

@Override
public boolean onContextItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case R.id.font_20:
                text_main_info.setTextSize(20);
                break;
        case R.id.font_30:
                text_main_info.setTextSize(30);
                break;
        case R.id.font_red:
                text_main_info.setTextColor(Color.RED);
                break;
        case R.id.font_green:
                text_main_info.setTextColor(Color.GREEN);
                break;
        }
        return super.onContextItemSelected(item);
}


四、PopupWindow  彈出式窗體菜單(自定義菜單):
、核心代碼:

publicclass MainActivity extends Activity {
private PopupWindow popupWindow = null;
private View popup_view = null;


@Override
protectedvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
popup_view = getLayoutInflater().inflate(R.layout.popwindow_menu, null);
popupWindow = new PopupWindow(popup_view, LayoutParams.MATCH_PARENT,
LayoutParams.WRAP_CONTENT);
popupWindow.setBackgroundDrawable(new ColorDrawable(Color.YELLOW));
}


@Override
publicboolean onKeyDown(int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_MENU:
if (popupWindow.isShowing()) {
popupWindow.dismiss();
} else {
popupWindow.showAtLocation(popup_view, Gravity.BOTTOM, 0, 0);


ImageView imageView_popup_back = (ImageView) popup_view
.findViewById(R.id.imageView_popup_back);
imageView_popup_back.setOnClickListener(new OnClickListener() {
@Override
publicvoid onClick(View v) {
Intent intent = new Intent();
// intent.setAction(Intent.ACTION_MAIN);
// intent.addCategory(Intent.CATEGORY_HOME);
intent.setAction("android.intent.action.MAIN");
intent.addCategory("android.intent.category.HOME");
startActivity(intent);
}
});


ImageView imageView_popup_share = (ImageView) popup_view
.findViewById(R.id.imageView_popup_share);
imageView_popup_share.setOnClickListener(new OnClickListener() {
@Override
publicvoid onClick(View v) {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel://10086"));
startActivity(intent);
}
});


ImageView imageView_popup_collection = (ImageView) popup_view
.findViewById(R.id.imageView_popup_collection);
imageView_popup_collection
.setOnClickListener(new OnClickListener() {
@Override
publicvoid onClick(View v) {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_SENDTO);
intent.setData(Uri.parse("smsto:10086"));
intent.putExtra("sms_body", "該吃飯了,下課吧!");
startActivity(intent);
}
});
}
break;
case KeyEvent.KEYCODE_BACK:
if (popupWindow.isShowing()) {
popupWindow.dismiss();
returnfalse;
}
default:
break;
}
returnsuper.onKeyDown(keyCode, event);
}


@Override
publicboolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
returntrue;
}


@Override
publicboolean onMenuOpened(int featureId, Menu menu) {
returnfalse;
}


}


核心代碼:

publicclass MainActivity extends Activity {
private TextView textView_info;
private List<String> list_title = null;
private List<Drawable> list_icons = null;


private PopupWindow popupWindow = null;
private View popup_view = null;


/*
* private int[] imgIds = new int[] { R.drawable.intercept_list,
* R.drawable.intercept_rule, R.drawable.intercepted_record,
* R.drawable.location, R.drawable.incoming_and_outgoing_setting,
* R.drawable.privacy_manager, R.drawable.ip, R.drawable.dial,
* R.drawable.useful };
*
* private String[] arrTitles = new String[] { "攔截名單", "攔截規則", "攔截記錄",
* "歸屬地查詢", "來去電設置", "隱私管理", "IP電話設置", "通訊記錄", "常用號碼" };
*/


@Override
protectedvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);


textView_info = (TextView) findViewById(R.id.text_main_info);


list_title = new ArrayList<String>();
TypedArray arrTitles = getResources().obtainTypedArray(R.array.titles);
for (int i = 0; i < arrTitles.length(); i++) {
list_title.add(arrTitles.getString(i));
}


list_icons = new ArrayList<Drawable>();
TypedArray arrIcons = getResources().obtainTypedArray(R.array.icons);
for (int i = 0; i < arrIcons.length(); i++) {
list_icons.add(arrIcons.getDrawable(i));
}
textView_info.setText(list_title.toString());


popup_view = getLayoutInflater().inflate(R.layout.popupwindow_menu,
null);
popup_view.setFocusableInTouchMode(true);


GridView popup_gridView = (GridView) popup_view
.findViewById(R.id.gridView_popup);


popup_gridView.setAdapter(new MyAdapter(list_title, list_icons));
popup_gridView.setOnItemClickListener(new OnItemClickListener() {
@Override
publicvoid onItemClick(AdapterView<?> arg0, View arg1,
int position, long id) {
textView_info.setText("您點擊了:" + position);
}
});


textView_info.setOnClickListener(new OnClickListener() {
@Override
publicvoid onClick(View v) {
textView_info.setText("您點擊了文字");
}
});
// 方法2的第二步:給popupWindow上的View增加鍵盤監聽事件。目的是:能在再次點擊menu按鍵的時候,讓popupWindow消失。
popup_view.setOnKeyListener(new OnKeyListener() {
@Override
publicboolean onKey(View v, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_MENU && popupWindow.isShowing()
&& event.getAction() == KeyEvent.ACTION_DOWN) {
popupWindow.dismiss();
}
returnfalse;
}
});
popupWindow = new PopupWindow(popup_view, LayoutParams.MATCH_PARENT,
LayoutParams.WRAP_CONTENT);
popupWindow.setBackgroundDrawable(new ColorDrawable(Color.WHITE));
}


@Override
publicboolean onKeyDown(int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_MENU:
if (!popupWindow.isShowing()) {
// 解決方法二:
// 方法2的第一步:讓popupWindow聚焦。只有聚焦之后,其中的Gridview的每個item才能被監聽到點擊事件。
popupWindow.setFocusable(true);
popupWindow.showAtLocation(popup_view, Gravity.BOTTOM, 0, 0);
}
returntrue;
default:
break;
}
returnsuper.onKeyDown(keyCode, event);
}


class MyAdapter extends BaseAdapter {
private List<String> list_title = null;
private List<Drawable> list_icons = null;


public MyAdapter(List<String> list_title, List<Drawable> list_icons) {
this.list_title = list_title;
this.list_icons = list_icons;
}


@Override
publicint getCount() {
returnlist_title.size();
}


@Override
public Object getItem(int position) {
returnlist_title.get(position);
}


@Override
publiclong getItemId(int position) {
return position;
}


@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder mHolder = null;
if (convertView == null) {
mHolder = new ViewHolder();
convertView = getLayoutInflater().inflate(
R.layout.item_gridview, parent, false);
mHolder.textView_item_gridview_title = (TextView) convertView
.findViewById(R.id.textView_item_gridview_title);
mHolder.imageView_item_gridview_icon = (ImageView) convertView
.findViewById(R.id.imageView_item_gridview_icon);
convertView.setTag(mHolder);
} else {
mHolder = (ViewHolder) convertView.getTag();
}
mHolder.textView_item_gridview_title.setText(list_title
.get(position));
mHolder.imageView_item_gridview_icon.setImageDrawable(list_icons
.get(position));


// 解決方法一:
// convertView.setOnClickListener(new OnClickListener() {
// @Override
// public void onClick(View v) {
// textView_info.setText(v.getTag().toString());
// }
// });
return convertView;
}


class ViewHolder {
private ImageView imageView_item_gridview_icon;
private TextView textView_item_gridview_title;
}


}


@Override
publicboolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
returnfalse;
}
}


Dialog及Menu

版權所有 IT知識庫 CopyRight ? 2009-2015 IT知識庫 IT610.com , All Rights Reserved. 京ICP備09083238號
广东25选5开奖结果