Android布局类型资源(三)---menu

Android中的资源是指非代码部分,如图片、音频、视频、字符等资源。一般我们都是在assets中保存原生的文件,如:MP3文件,Android程序不能直接访问,必须通过AssetManager类以二进制流的形式读取。布局类型文件一般都放在res文件夹下,如:anim,drawable,layout,values,xml,raw,menu等等,这些资源都可以通过R资源类直接访问。assets中的资源很少用到,res中的资源经常用到。

下面我们继续讲解如何使用这些典型布局类型文件:

七、使用菜单(menu)资源:任何视图组件的创建方式都有两种:一种是通过布局文件中声明创建;另一种通过在代码中的创建,菜单也是如此。

Android中的菜单分为选项菜单、上下文菜单和子菜单,都可以在XML文件中声明定义,在代码中通过MenuInflater类使用。

1)典型菜单资源文件结构:

<menu>根元素,在<menu>根元素里面会嵌套<item>、<group>子元素,<item>元素总也可以嵌套<menu>形成子菜单。

2)<menu>根元素没有属性,它包含<item>、<group>子元素

3)<group>表示一个菜单组,相同的菜单可以一起设置其属性,例如visable,enable和checkable等。属性如下:

id:唯一标志该菜单组的引用id。

menuCategory:对菜单进行分类,定义菜单的优先级,有效值为container,system,secondary和alternative。

orderInCategory:一个分类排序整数。

checkableBehavior:选择行为,单选、多选还是其他,有效值为none,all,single。

visable:是否可见,true或者false。

enabled:是否可用,true或者false。

4)<item>表示菜单项,包含在<menu>或<group>中的有效属性。<item>元素的属性如下:

id:唯一标志该菜单组的引用id。

menuCategory:菜单分类。

       orderInCategory:一个分类排序整数。

title:菜单标题字符串。

titleCondensed:浓缩标题,适合标题太长的时候使用。

icon:菜单的图标。

alphabeticShortcut:字符快捷键。

numberShortcut:数字快捷键。

checkable:是否可选。

checked:是否已经备选。

visable:是否可见。

enabled:是否可用。

案例一:通过menu.xml创建菜单

1)、menu.xml文件:

<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:icon="@drawable/ic_launcher"
        android:title="File">
    <menu>
       <group 
           android:id="@+id/noncheckable_group"
           android:checkableBehavior="none">
           <item
               android:id="@+id/newFile"
               android:title="New"
               android:alphabeticShortcut="n">
           </item>
           <item
               android:id="@+id/openFile"
               android:title="Open"
               android:alphabeticShortcut="o">
           </item>
           <item
               android:id="@+id/saveFile"
               android:title="Save"
               android:alphabeticShortcut="s">
           </item>
       </group>
    </menu>    
    </item>
    <item 
        android:title="Edit"
        android:icon="@drawable/ic_launcher">
    <menu>
       <group 
           android:id="@+id/edit_group"
           android:checkableBehavior="single">
           <item
               android:id="@+id/cut"
               android:title="Cut">
           </item>
           <item
               android:id="@+id/past"
               android:title="Past">
           </item>
       </group>
    </menu>
</item>
<item 
   android:title="Help"
   android:icon="@drawable/ic_launcher">
    <menu>
       <group android:id="@+id/help_group">
           <item android:id="@+id/about"
               android:title="About">
           </item>
           <item android:id="@+id/exit"
               android:title="Exit">
           </item>
       </group>
    </menu>
    </item>
</menu>


test_menu.java文件:

public class Test_Menu extends Activity{

private MenuInflater mi;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.test_menu);
mi = new MenuInflater(this);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
mi.inflate(R.menu.menu, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()){
case R.id.about:
aboutAlert("本实例演示的是如何使用Xml菜单资源来定义菜单!");
break;
case R.id.exit:
exitAlert("真的要退出吗?");
break;
}
return super.onOptionsItemSelected(item);
}

private void exitAlert(String msg){
//实例化AlertDialog.Builder
AlertDialog.Builder  builder = new AlertDialog.Builder(this);
//设置显示信息
builder.setMessage(msg)
.setCancelable(false)
//确定按钮
.setPositiveButton("确定", new DialogInterface.OnClickListener() {

@Override
public void onClick(DialogInterface dialog, int which) {
// 结束Activity
finish();
}
//取消按钮
}).setNegativeButton("取消", new DialogInterface.OnClickListener() {

@Override
public void onClick(DialogInterface dialog, int which) {
return;
}
});
//创建对话框
AlertDialog alert = builder.create();
//显示对话框
alert.show();
}

private void aboutAlert(String msg){
//实例化AlertDialog.Builder
AlertDialog.Builder  builder = new AlertDialog.Builder(this);
//设置显示信息
builder.setMessage(msg)
.setCancelable(false)
//确定按钮
.setPositiveButton("确定", new DialogInterface.OnClickListener() {

@Override
public void onClick(DialogInterface dialog, int which) {
}
});
//创建对话框
AlertDialog alert = builder.create();
//显示对话框
alert.show();
}
}


案例二:直接在Activity类中创建菜单:

public class Option_Menu extends Activity {

//菜单项ID常量
private static final int Item_Start = Menu.FIRST;
private static final int Item_Exit = Menu.FIRST+1;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.option_menu);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
menu.add(0, Item_Start, 0, "开始");
menu.add(0, Item_Exit, 0, "退出");
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()){
//菜单项1被选择
case Item_Start:
//这只Activity标题
setTitle("开始游戏");
break;
//菜单项1被选择
case Item_Exit:
setTitle("退出!");
break;
}
return true;
}
}


出处: http://blog.csdn.net/cl05300629/article/details/17717573 作者:伫望碧落

你可能感兴趣的:(android,资源,布局,菜单)