您的位置:首页 > 移动开发 > Android开发

Pro Android学习笔记(三五):Menu(6):XML方式 & PopUp菜单

2013-10-01 10:57 501 查看

利用XML创建菜单

在代码中对每个菜单项进行设置,繁琐且修改不灵活,不能适配多国语言的要求,可以利用资源进行设置。在之前的Pro Android学习笔记(十):了解Intent(上)#系统的Intent中我们已经给了一个如何利用XML进行菜单项设计的详细小例子,这里就不在重复。这里仅补充一下说明。

XML的有关属性

<menu xmlns:android="http://schemas.android.com/apk/res/android">

<!-- This group uses the default category. -->

<group android:id="@+id/menuGroup_Main">

<item android:id="@+id/menu_testPick"

android:orderInCategory="5"

android:icon="@draw/ic_leaf"

android:title
="Test Pick" />

<item .../>

<item .../>

<!-- 下面是子菜单的例子:采用menu嵌套的方式实现 –>

<item android:id="@+id/file" android:title="@string/file" >

<menu>

<item ...... />

<item ...... />

</menu>

</item>


</group>

</menu>
相关的可以阅读reference中的API Guide。(sdk/docs/guide/topics/ui/menus.html#xml)。除了上面例子给出的属性外,部分常用的属性如下:
如果我们要制定menu的category,这可通过以下的方式:

<group android:id="@+id/some_group_id " android:menuCategory="secondary">
可以设置checkable属性,例子如下:

<?xml version="1.0" encoding="utf-8"?>

<menu …… >

<group android:id="@+id/menuGroup_popup" android:checkableBehavior="all">

<item android:id="@+id/pop_menu_1" android:checked="true" android:title="popup.item.1" />

<item android:id="@+id/pop_menu_2" android:title="popup.item.2" />

</group>

</menu>
下图是在一个pop-up菜单上采用采用这个menu xml构造的样式:



此外还可以设置enable,visible,shortcut等属性,如下:

<item android:id="… " android:enabled="true" … />

<item android:id="… " android:alphabeticShortcut="a" … />

<item android:id="... " android:visible="true" ... />

onClick事件

在之前学习中,我们知道menu item支持click listener,因此我们可以直接在item中设置onClick事件的回调函数,如下:

<item …… android:onClick="onClick_callback_method_name" />

Pop-up菜单

当view收到某种事件,例如点击,可以触发弹出菜单(PopupMenu)。下面是小例子的代码:

public class PopupMenuTest extends Activity{

private TextView infoTv = null;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.popup_layout);

infoTv = (TextView)findViewById(R.id.pop_pureInfo);

showInfo("点击这个Textview,将演示Pop-up Menu.");

//点击textView时,弹出popupMenu

infoTv.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

showPopupMenu();

}

});

}



private void showPopupMenu(){

PopupMenu popMenu = new PopupMenu(this,infoTv);

popMenu.inflate(R.menu.my_popup);

//popMenu.getMenuInflater().inflate(R.menu.my_popup, popMenu.getMenu()); //Android 4.0之前的处理

popMenu.setOnMenuItemClickListener(new OnMenuItemClickListener() {

//不能通过Activity的onOptionsItemSelected()来实现Popup菜单项的触发,而是通过click listener的方式。

public boolean onMenuItemClick(MenuItem item) {

showInfo("Item clicked : " + item.toString());

return false;

}

});

showInfo(popMenu.toString());

popMenu.show();

}



private void showInfo(String info){

infoTv.append(info + "\n");

Log.d(getLocalClassName(),info);

}

}



最初,运行的效果如上左图,popup菜单挤在最上面,根本看不全。而我们期待的是右图的方式。这是因为某view的popup菜单在某view的外面显示,即不会遮挡某view。一开始,我们将textview设置为全屏模式,没有预留空余位置显示,所以成了左图那样,效果很不理想。后来我们将textView的layout_height改为wrap_content,就得到了期待的菜单方式。
如果view所占的空间很大,而菜单的内容有比较多,可以考虑使用contextMenu。
本博文涉及的例子代码,可以在Pro Android学习:Menu中下载。
相关链接:
我的Android开发相关文章
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐