Android学习笔记(五)对话框与菜单

一、对话框

  无论在桌面应用还是Web应用都会存在与用户交互的对话框,在手机应用也不可缺少。在Anroid里面要构造一个对话框则用lertDialog.Builder方法。有两个重载

AlertDialog.Builder (Context context, int theme)
AlertDialog.Builder (Context context)

第一个context参数传入的,一般传入当前继承Activity的类的this,例如当前的Activity的类是MessageBoxTest,那么传入的参数则是MessageBoxTest.this。

AlertDialog可调用的方法有

复制代码
 1 public AlertDialog.Builder setTitle (CharSequence title) //设置对话框标题
 2 public AlertDialog.Builder setIcon (int iconId) //设置对话框图标
 3 public AlertDialog.Builder setView (View view) //设置对话框里面的布局
 4 public AlertDialog.Builder setMessage (CharSequence message) //设置对话框的提示内容
 5 public AlertDialog.Builder setMultiChoiceItems (CharSequence[] items, boolean[] checkedItems,DialogInterface.OnMultiChoiceClickListener listener) //设置对话框中复选框
 6 public AlertDialog.Builder setSingleChoiceItems (CharSequence[] items, int checkedItem, DialogInterface.OnClickListener listener) //设置对话框中的单选框
 7 public AlertDialog.Builder setNeutralButton (CharSequence text, DialogInterface.OnClickListener listener) //设置中间按钮
 8 public AlertDialog.Builder setPositiveButton (CharSequence text, DialogInterface.OnClickListener listener) //设置右边按钮
 9 public AlertDialog.Builder setNegativeButton (CharSequence text, DialogInterface.OnClickListener listener) //设置左边按钮
10 
11 public AlertDialog show () //显示对话框
复制代码

  可以看出凡是对对话框设置的方法都是返回AlertDialog.Builder的,这样就可以类似JQuery对象那样进行链式操作。尽管有链式操作,但是设置提示内容,设置复选框和单选框这三个设置都会影响到对话框的内容,他们的优先级与调用顺序无关系。优先级由高到低排列的顺序是setMessage,setMultiChoiceItems,setSingleChoiceItems。也就是三个方法同时调用的话,生效的只能setMessage。

  上面有不少方法要传入一个OnClickListener的对象,都是单击相应的选框或者按钮时触发的时间,例如下面一段例程

复制代码
 1          new AlertDialog.Builder(MessageBoxTest.this)
 2         .setTitle("TestMessageBox")
 3         .setIcon(R.drawable.ic_launcher)
 4         .setNeutralButton("Nothoing",
 5                 new DialogInterface.OnClickListener(){
 6 
 7                     @Override
 8                     public void onClick(DialogInterface arg0, int arg1) {
 9                         btnMsgBox1.setText(Btn.getText());
10                     }
11             
12             
13         })//middle
14         .setPositiveButton("NO Sure", null)
15         .setNegativeButton("Cancle", null)
16         .setSingleChoiceItems(new String[]{"Item1","Item2","Item3","Item4","Item5","Item6"}, 0, null)
17         .setMultiChoiceItems(new String[]{"Item1","Item2","Item3","Item4","Item5","Item6"}, new boolean[]{true,true,true,true,true,true}, null)
18         .setMessage("Are you Sure?")
19         .show();
复制代码

如果要使用布局,则可以用以下的形式 

1         LayoutInflater infalter= LayoutInflater.from(this);
2         View layout=infalter.inflate(R.layout.step_three_page, null); 
3         
4         new AlertDialog.Builder(MessageBoxTest.this)
5         .setView(layout)
6         .show();

当要获取布局里面的控件时,就用回findViewById,不过是用布局的示例来调用,而并非this。

 

如果要给对话框换换样式,可以调用这个方法AlertDialog.Builder (Context context, int theme)。样式可以在res\values\styles.xml中添加一段

复制代码
    <style name="DialogTheme" parent="@android:style/Theme.Dialog">
        <item name="android:windowFrame">@null</item> 
        <item name="android:windowIsFloating">true</item> 
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:background">@android:color/black</item> 
        <item name="android:windowBackground">@android:color/black</item>
         <item name="android:backgroundDimAmount">0.5</item>
         <item name="android:backgroundDimEnabled">true</item>
         <item name="android:textColor">#000000</item>
    </style>
复制代码

然后在构造对话框的地方把代码改改

1 new AlertDialog.Builder(MessageBoxTest.this,(int)R.style.DialogTheme)
2 .setTitle("TestMessageBox")
3 ……..
4 .show()

 

 

二、菜单

  在最初摸索使用Android系统时,手机上有三个按键:后退,主页和菜单,这里菜单的内容可以设置。在由IDE构造的MainActivity.java中也有一个构造菜单的方法

public boolean onCreateOptionsMenu(Menu menu)

如果要对当前Activity进行设置的话,就在这个方法里面进行操作,可以调用Add方法增加菜单项,方法原型如下

abstract MenuItem  add(int groupId, int itemId, int order, CharSequence title)
abstract MenuItem  add(int groupId, int itemId, int order, int titleRes)

可以看下面的例程

复制代码
1     @Override
2     public boolean onCreateOptionsMenu(Menu menu) {
3         // Inflate the menu; this adds items to the action bar if it is present.
4         getMenuInflater().inflate(R.menu.my_menu, menu);
5         menu.add(0, RED_ITEM, 0, "RED");
6         menu.add(0,GREEN_ITEM,0,"GREEN");
7         menu.add(0,BLUE_ITEM,0,"BLUE");
8         return true;
9     }
复制代码

第二个参数RED_ITEM,GREEN_ITEM,BLUE_ITEM这个是菜单项的,这个值以Menu.FIRST为初值,逐个递增。当点击了菜单某项时,会调用onOptionsItemSelected方法,这时候需要重写,例如

复制代码
 1     @Override
 2     public boolean onOptionsItemSelected(MenuItem item)
 3     {
 4         String nTitle="Title_";
 5         switch(item.getItemId())
 6         {
 7         case RED_ITEM:
 8             nTitle+="RED";
 9             this.setTitleColor(Color.RED);
10             btnMenuTest.setBackgroundColor(Color.RED);
11             btnMenuTest.setText("RED");
12             break;
13         case GREEN_ITEM:
14             nTitle+="GREEN";
15             this.setTitleColor(Color.GREEN);
16             btnMenuTest.setBackgroundColor(Color.GREEN);
17             btnMenuTest.setText("GREEN");
18             break;
19         case BLUE_ITEM:
20             nTitle+="BLUE";
21             this.setTitleColor(Color.BLUE);
22             btnMenuTest.setBackgroundColor(Color.BLUE);
23             btnMenuTest.setText("BLUE");
24             break;
25         
26         }
27         this.setTitle(nTitle);
28         return super.onOptionsItemSelected( item);
29     }
复制代码

 

 

posted @   猴健居士  阅读(580)  评论(0编辑  收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示