Android第四十四天

 

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());
  1.  
 
 
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;
}

}
  1.  

                選項菜單的注意事項:

                        選項菜單以來的對象是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>
  1.  

                二、重寫Activity中的onCreateContextMenu()方法

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

                三、註冊在控件上彈出一個上下文菜單registerForContextMenu(View  view);(後面的參數表示綁定的View)

 
Button button=(Button) findViewById(R.id.btn);
registerForContextMenu(button);
  1.  

        上下文菜單的事件處理:

        第一種方法

                在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);
}
  1.  

        第二種方法

                menu.add()        返回的是一個menuItem對象

                menuItem.setOnMenuItemClickListener(MenuItem  item)        進行選項菜單的斷定

 
  1. 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());
  1. 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();

                        六種對話框:

第一種:

  1. /**
    
    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;
相關文章
相關標籤/搜索