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 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步