1、菜單java
(1)選擇菜單(OptionsMenu)android
第一種方法:ide
一、在res目錄下創建一個名稱是menu的文件夾;函數
二、在menu下面創建一個XML文件(默認就是menu的類型)佈局
三、在創建的XML文件中添加菜單的選項ui
XML中有不少的屬性:this
<1>android:orderInCategory 表示的意思是:肯定當前的item在整個item中所在的位置(數字越小越靠前)code
<2>android:title 肯定選項的內容xml
<3>android:id 設置選項ID對象
<4>android:icon 設置選項的圖標
<5>android:showAsAction 設置圖標的顯示方式
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/select_01" android:orderInCategory="1" android:title="馬超"/> <item android:id="@+id/select_02" android:orderInCategory="2" android:title="馬雲祿"/> <item android:id="@+id/select_03" android:orderInCategory="3" android:title="馬謖"/> </menu>
四、在Activity中重寫onCreateOptionsMenu方法
@Override public boolean onCreateOptionsMenu(Menu menu) { }
五、經過getMenuInflater()的佈局加載器來加載文件
getMenuInflater().inflate(R.menu.main,menu);
第二個參數表示的意思是將前面的menu佈局加載到後面的menu對象中。
第二種方法
一、 在Activity默認重寫的onCreateOptionsMenu方法中經過menu對象的add方法來添加item的值
menu.add(" "); 添加選項的內容
menu.add("黃蓋"); menu.add("黃忠"); menu.add("黃月英");
menu.add(groupId,ItemId,orderInCategory,title);
第一個參數:表示組的ID
第二個參數:表示本身的ID
第三個參數:Item的排列順序
第四個參數:當前Item的內容
menu.add(1, 1, 1, "曹洪"); menu.add(1, 2, 2, "曹丕"); menu.add(2, 1, 3, "夏侯淵"); menu.add(2, 2, 4, "夏侯惇");
二、在Item中添加子菜單
menu.addSubMenu(" "); 添加菜單內容
menu.addSubMenu("孫堅"); menu.addSubMenu("孫權"); menu.addSubMenu("孫策");
menu.addSubMenu(groupId,ItemId,orderInCategory,title);
第一個參數:表示組的ID
第二個參數:表示本身的ID
第三個參數:Item的排列順序
第四個參數:當前Item的內容
注意:添加子菜單的須要在addSubMenu方法的返回值中進行添加
SubMenu subMenu = menu.addSubMenu("魏國"); subMenu.add("曹操"); subMenu.add("典韋"); subMenu.add("許褚"); SubMenu subMenu2 = menu.addSubMenu("蜀國"); subMenu2.add("周倉"); subMenu2.add("關平"); subMenu2.add("馬良"); SubMenu subMenu3 = menu.addSubMenu("吳國"); subMenu3.add("大喬"); subMenu3.add("小喬"); subMenu3.add("孫尚香");
菜單事件的監聽
第一種方法:
直接重寫onOptionsItemSelected(MenuItem item)方法,在這個參數裏能夠經過item.getItemId()來獲取當前點擊Item的id。
@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.select_01: Toast.makeText(MainActivity.this, "你選擇了馬超", Toast.LENGTH_SHORT) .show(); break; case R.id.select_02: Toast.makeText(MainActivity.this, "你選擇了馬雲祿", Toast.LENGTH_SHORT) .show(); break; case R.id.select_03: Toast.makeText(MainActivity.this, "你選擇了馬謖", Toast.LENGTH_SHORT) .show(); break; default: break; } return super.onOptionsItemSelected(item); }
第二種方法:
menu.add() 返回一個menuitem的對象
menuItem.setOnMenuItemClickListenter(MenuItem item) 能夠進行選項菜單的斷定
MenuItem menuItem = menu.add(1, 1, 1, "黃蓋"); MenuItem menuItem2 = menu.add(1, 2, 2, "黃忠"); MenuItem menuItem3 = menu.add(1, 3, 3, "黃月英"); menuItem.setOnMenuItemClickListener(new MyOnMenuItemClickListener()); menuItem2.setOnMenuItemClickListener(new MyOnMenuItemClickListener()); menuItem3.setOnMenuItemClickListener(new MyOnMenuItemClickListener());
private class MyOnMenuItemClickListener implements OnMenuItemClickListener { @Override public boolean onMenuItemClick(MenuItem item) { switch (item.getItemId()) { case 1: Toast.makeText(MainActivity.this, "你選擇了黃蓋", Toast.LENGTH_SHORT) .show(); break; case 2: Toast.makeText(MainActivity.this, "你選擇了黃忠", Toast.LENGTH_SHORT) .show(); break; case 3: Toast.makeText(MainActivity.this, "你選擇了黃月英", Toast.LENGTH_SHORT) .show(); break; default: break; } return false; } }
選項菜單的注意事項:
選項菜單以來的對象是Activity,不能依賴於View。
(2)上下文菜單(ContextMenu)
注意:上下文菜單依賴的對象是View,也就是說能夠觸發某個控件來顯示一個菜單選項。
第一種方法:
一、和選項菜單同樣,在menu文件夾下創建一個Android XML file來進行配置;
<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" tools:context="com.hxl.android_day01_test.ContextMenuActivity" > <item android:id="@+id/wei" android:orderInCategory="1" android:showAsAction="never" android:title="魏國"/> <item android:id="@+id/shu" android:orderInCategory="2" android:showAsAction="never" android:title="蜀國"/> <item android:id="@+id/wu" android:orderInCategory="3" android:showAsAction="never" android:title="吳國"/> </menu>
二、重寫Activity中的onCreateContextMenu()方法
@Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { getMenuInflater().inflate(R.menu.context_menu, menu); super.onCreateContextMenu(menu, v, menuInfo); }
三、註冊在控件上彈出一個上下文菜單registerForContextMenu(View view);(後面的參數表示綁定的View)
Button button=(Button) findViewById(R.id.btn); registerForContextMenu(button);
上下文菜單的事件處理:
第一種方法
在Activity中重寫onContextItemSelected(MenuItem item)方法,能夠經過item.getItemId()來獲取點擊的Item的id。
@Override public boolean onContextItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.wei: Toast.makeText(ContextMenuActivity.this, "你選擇了魏國", Toast.LENGTH_SHORT).show(); break; case R.id.shu: Toast.makeText(ContextMenuActivity.this, "你選擇了蜀國", Toast.LENGTH_SHORT).show(); break; case R.id.wu: Toast.makeText(ContextMenuActivity.this, "你選擇了吳國", Toast.LENGTH_SHORT).show(); break; default: break; } return super.onContextItemSelected(item); }
第二種方法
menu.add() 返回的是一個menuItem對象
menuItem.setOnMenuItemClickListener(MenuItem item) 進行選項菜單的斷定
MenuItem menuItem = menu.add(1, 1, 1, "周瑜"); 2.MenuItem menuItem2 = menu.add(1, 2, 3, "甘寧"); 3.MenuItem menuItem3 = menu.add(1, 3, 3, "淩統"); 4.menuItem.setOnMenuItemClickListener(new MyOnMenuItemClickListener()); 5.menuItem2.setOnMenuItemClickListener(new MyOnMenuItemClickListener()); 6.menuItem3.setOnMenuItemClickListener(new MyOnMenuItemClickListener());
private class MyOnMenuItemClickListener implements OnMenuItemClickListener{ 2. 3.@Override 4.public boolean onMenuItemClick(MenuItem item) { 5.switch (item.getItemId()) { 6.case 1: 7.Toast.makeText(ContextMenuActivity.this, "你選擇了周瑜", Toast.LENGTH_SHORT).show(); 8.break; 9.case 2: 10.Toast.makeText(ContextMenuActivity.this, "你選擇了甘寧", Toast.LENGTH_SHORT).show(); 11.break; 12.case 3: 13.Toast.makeText(ContextMenuActivity.this, "你選擇了淩統", Toast.LENGTH_SHORT).show(); 14.break; 15. 16.default: 17.break; 18.} 19.return false; 20.}
(3)PopupMenu的使用
一、PopupMenu popupMenu=new PopupMenu(PopupMenuActivity.this, v);初始化PopupMenu對象,第二個參數的意思是:將PopupMenu綁定給此控件
二、popupMenu.getMenuInflater().inflate(R.menu.popup_menu, popupMenu.getMenu());綁定佈局對象
三、popupMenu.setOnMenuItemClickListener(new MyOnMenuItemClickListener());設置點擊事件
四、popupMenu.show();顯示菜單
五、popupMenu.setOnDismissListener(new MyOnDismissListener());設置消失時觸發的事件
六、popupMenu.dismiss();菜單消失
ContextMenu和PopupMenu的區別是什麼?
ContextMenu中只能綁定一個View來進行顯示;PopupMenu可以同時綁定多個View來進行顯示。
(4)PopupWindow的使用(在某一控件下能夠彈出一個選項框的內容)重點
//第一步:初始化PopupWindow對象
PopupWindow popupWindow=new PopupWindow(PopupWindowActivity.this);
//第二步:經過PopupWindow對象來對PopupWindow對象添加相應的設置
popupWindow.setHeight(LayoutParams.WRAP_CONTENT);
popupWindow.setWidth(LayoutParams.WRAP_CONTENT);
//下面這句代碼經常用來解決一個問題:點擊彈出框之外的區域若是彈出框不消失的話,添加這個屬性理論上就消失了(通常狀況也不設置)
popupWindow.setBackgroundDrawable(new ColorDrawable(0x00000000));
//設置彈出框能夠獲取焦點
popupWindow.setFocusable(true);
//表示的是在彈出框之外的區域點擊了以後,彈出框消失(true)
popupWindow.setOutsideTouchable(true);
//表示的是是否能夠觸摸(通常不設置)
popupWindow.setTouchable(true);
//第三步:經過佈局加載器對象將XML文件轉換成View對象
LayoutInflater inflater=getLayoutInflater();
View view =inflater.inflate(R.layout.popupwindow_list, null);
//第四步:將View添加到PopupWindow中
popupWindow.setContentView(view);
//第五步:肯定PopupWindow顯示的位置
popupWindow.showAsDropDown(v);
//讓PopupWindow消失的方法
popupWindow.dismiss();
(5)對話框的寫法
一、初始化對話框的Builder
AlertDialog.Builder builder=new Builder(DialogActivity.this);
二、經過Builder來設置相應的信息
builder.setTitle("你要選擇哪一個國家?");
builder.setIcon(R.drawable.ic_launcher);
builder.setMessage("肯定你要選擇的國家");
三、.show();
六種對話框:
第一種:
/** 2.* 用於提示信息,只是知足數據顯示 3.*/ 4. 5.public void firstDialog(){ 6.//第一步:經過AlertDailog中的Builder完成Builder的初始化,對話框的使用實際上是用Builder建立的 7.//這裏的上下文對象只能是當前Dailog所歸屬的頁面的上下文,不能使getApplicationContext() 8.AlertDialog.Builder builder=new Builder(DialogActivity.this); 9.//第二步:能夠經過Builder來設置顯示的信息 10.builder.setTitle("你要選擇哪一個國家?"); 11.builder.setIcon(R.drawable.ic_launcher); 12.builder.setMessage("肯定你要選擇的國家"); 13.builder.setNegativeButton("魏", new DialogInterface.OnClickListener() { 14. 15.@Override 16.public void onClick(DialogInterface dialog, int which) { 17.Log.i("****", "你選擇了魏國"); 18.} 19.}); 20.builder.setNeutralButton("蜀", new DialogInterface.OnClickListener() { 21. 22.@Override 23.public void onClick(DialogInterface dialog, int which) { 24.Log.i("****", "你選擇了蜀國"); 25.} 26.}); 27.builder.setPositiveButton("吳", new DialogInterface.OnClickListener() { 28. 29.@Override 30.public void onClick(DialogInterface dialog, int which) { 31.Log.i("****", "你選擇了吳國"); 32.} 33.}); 34.builder.show(); 35.}
第二種:
1./** 2.* 帶有那個輸入框的對話框 3.*/ 4.public void secondDialog() { 5.AlertDialog.Builder builder=new Builder(DialogActivity.this); 6.builder.setTitle("請輸入"); 7.final EditText editText=new EditText(DialogActivity.this); 8.builder.setView(editText); 9.builder.setNegativeButton("取消",null); 10.builder.setPositiveButton("肯定",new DialogInterface.OnClickListener() { 11.@Override 12.public void onClick(DialogInterface dialog, int which) { 13.Log.e("-------------","你提交了信息 "+editText.getText().toString()); 14.} 15.}); 16.builder.show(); 17.}
第三種:
1./** 2.* 帶有多選框的對話框 3.*/ 4.public void thirdDialog() { 5.AlertDialog.Builder builder=new Builder(DialogActivity.this); 6.builder.setTitle("你喜歡的城市"); 7.builder.setMultiChoiceItems(new String[]{"成都","廣州","上海","北京"},new boolean[]{false,false,false,true},new OnMultiChoiceClickListener() { 8./** 9.* which:Item的位置 10.* isChecked:選中的狀態是什麼? 取消/選中 11.*/ 12.@Override 13.public void onClick(DialogInterface dialog, int which, boolean isChecked) { 14.Log.e("-------你選擇的位置是:"+which+"當前的狀態是:",isChecked+""); 15.} 16.}); 17.builder.setNegativeButton("取消",null); 18.builder.setPositiveButton("肯定",new DialogInterface.OnClickListener() { 19.@Override 20.public void onClick(DialogInterface dialog, int which) { 21.Log.e("------------------","數據已經提交...."); 22.} 23.}); 24.builder.show(); 25.}
第四種:
/** 2.* 具備單選框的對話框 3.*/ 4.public void fouthDialog() { 5.AlertDialog.Builder builder=new Builder(DialogActivity.this); 6.builder.setTitle("性別選擇"); 7.builder.setSingleChoiceItems(new String[]{"男","女","other"}, 0,new DialogInterface.OnClickListener() { 8.@Override 9.public void onClick(DialogInterface dialog, int which) { 10.Log.e("-------當前選中的位置是:-------",which+""); 11.} 12.}); 13.builder.setNegativeButton("取消",null); 14.builder.setPositiveButton("提交",new DialogInterface.OnClickListener() { 15.@Override 16.public void onClick(DialogInterface dialog, int which) { 17.Log.e("-----------","數據已經提交慢慢刷...."); 18.} 19.}); 20.builder.show(); 21.}
第五種:
1./** 2.* 含有list形式的對話框 3.*/ 4.public void fifthDialog(){ 5.AlertDialog.Builder builder=new Builder(DialogActivity.this); 6.builder.setTitle("多Item形式的對話框"); 7.builder.setItems(new String []{"魏","蜀","吳"},new DialogInterface.OnClickListener() { 8. 9.@Override 10.public void onClick(DialogInterface dialog, int which) { 11.Log.i("------", "當前的選擇位置是:"+which); 12.dialog.dismiss(); 13.} 14.}); 15.builder.show(); 16.}
第六種:
public class MyDialog extends Dialog{ 2.String title; 3.String content; 4.TextView mTextViewTitle; 5.TextView mTextViewContent; 6.Button cancer; 7.Button submit; 8. 9.public MyDialog(Context context,String title,String content) { 10.super(context); 11.this.title=title; 12.this.content=content; 13.init(context); 14.} 15./** 16.* 初始化Dialog 17.*/ 18.private void init(Context context) { 19.//第一步:獲取佈局加載器 20.LayoutInflater inflater=(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 21.//第二步:將layout轉換成View 22.View view =inflater.inflate(R.layout.dialog_layout, null); 23.setContentView(view); 24.//設置自定義Dialog的窗口的寬高 25.getWindow().setLayout(600, 600); 26.//第三步:找到控件 27.mTextViewTitle=(TextView) view.findViewById(R.id.textViewTitle); 28.mTextViewContent=(TextView) view.findViewById(R.id.textView); 29.cancer=(Button) view.findViewById(R.id.btncancer); 30.submit=(Button) view.findViewById(R.id.btnSure); 31.mTextViewContent.setText(content); 32.mTextViewTitle.setText(title); 33.submit.setOnClickListener(new Listener()); 34.cancer.setOnClickListener(new Listener()); 35.} 36./** 37.* 定義一個回調函數來完成那個點擊消息的回調 38.*/ 39.interface CallBack{ 40.public void click(int id); 41.} 42.CallBack callBack=null; 43.public void setOnCallBackListener(CallBack callBack){ 44.this.callBack=callBack; 45.} 46./** 47.* 點擊事件 48.*/ 49.private class Listener implements android.view.View.OnClickListener{ 50. 51.@Override 52.public void onClick(View v) { 53.callBack.click(v.getId()); 54.} 55. 56.} 57. 58.}
case R.id.btn_06_dialog: 2.MyDialog dialog=new MyDialog(DialogActivity.this, "請作出選擇", "你肯定要這樣嗎?"); 3.dialog.setOnCallBackListener(new CallBack() { 4. 5.@Override 6.public void click(int id) { 7.switch (id) { 8.case R.id.btnSure: 9.Log.i("--------", "您選擇了提交按鈕"); 10.break; 11.case R.id.btncancer: 12.Log.i("--------", "您選擇了取消按鈕"); 13.break; 14.default: 15.break; 16.} 17.} 18.}); 19.dialog.show(); 20.break;