android菜单创建的两种方式和菜单项添加图标

    菜单创建的两种方式:


    1、在xml文件中创建菜单:

具体代码:

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

xmlns:tools="http://schemas.android.com/tools"

tools:context="com.xunfang.menucreate.MainActivity" >

//此处创建子菜单

<item

android:id="@+id/sms"

android:icon="@drawable/sms"

android:orderInCategory="100"

android:showAsAction="never"

android:title="短信">

<menu>

<item

android:id="@+id/smsfamily"

android:icon="@drawable/smsalt"

android:orderInCategory="100"

android:showAsAction="never"

android:title="家庭短信"/>

<item

android:id="@+id/smscompany"

android:icon="@drawable/twitteralt"

android:orderInCategory="100"

android:showAsAction="never"

android:title="公司短信"/>

</menu>

</item>

<item

android:id="@+id/camera"

android:icon="@drawable/camera"

android:orderInCategory="100"

android:showAsAction="never"

android:title="照相机"/>

 </menu>

这种情况下创建菜单时,需要用到item标签,创建一个菜单选项,就必须用到一个item

当需要创建子菜单的时候:如有背景色的部分那样,在主菜单下创建子菜单,需要在item中嵌套一个menu标签,然后在menu标签中写子菜单,每一个子菜单还是要写在item标签中。

2、动态创建菜单:

public boolean onCreateOptionsMenu(Menu menu) {

                //给文件创建子菜单

SubMenu sub = menu.addSubMenu(Menu.FIRST, 1, 1, "文件") ;

sub.add(Menu.FIRST+3, 10, 1, "隐藏组3") ;

sub.add(Menu.FIRST+3, 11, 2, "显示组3") ;

menu.add(Menu.FIRST,2,2,"编辑") ;

sub.setIcon(R.drawable.browser) ;

sub.setHeaderIcon(R.drawable.browser) ;

MenuItem refactor = menu.add(Menu.FIRST + 1,3,10,"重构") ;

refactor.setIcon(R.drawable.clock) ;

MenuItem source = menu.add(Menu.FIRST + 1,4,6,"源码") ;

source.setIcon(R.drawable.sms) ;

menu.add(Menu.FIRST + 2 ,5,5,"导航") ;

menu.add(Menu.FIRST + 2,6,3,"搜索") ;

return true;

}

上面add()方法中的四个参数分别为:第一个参数表示处于同一个组中

第二个参数表示一个唯一的id

第三个参数是一个id,表示在菜单中菜单项显示的顺序

第四个参数表示显示的文本

注:给菜单项添加图标:

private void setIconVisible(Menu menu) {

try {

Class clazz = Class

.forName("com.android.internal.view.menu.MenuBuilder");

Method m = clazz.getDeclaredMethod("setOptionalIconsVisible",

boolean.class);

m.setAccessible(true);

m.invoke(menu, true);

} catch (Exception e) {

e.printStackTrace();

}

}

有背景的部分为代码关键部分,上面这个方法是我自己添加的一个方法,在添加图标的时候只需要调用这个方法就行了。

时间: 2024-10-08 10:19:46

android菜单创建的两种方式和菜单项添加图标的相关文章

android图片截取的两种方式

    文章主要提供android系统上拍照图片截取和图片 选择截取 两种方式,适用于app头像选择等环境. 拍照截取 打开相机 Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(intent,"自定义"); 截图 Intent intent = getCropImageIntent(data); startActivityForResult(intent, "

em创建的两种方式

em创建(两种方式1,图形dbca,当然了,前提是先创建一个监听. 2,手工命令安装em)手工命令创建em(确保数据库开启,确保监听正常并且最好是动态监听,确保system表空间够用大概1G左右),我的空间有限只给了800M,如下 select file_name,tablespace_name,bytes/1024/1024 from dba_data_files where tablespace_name like 'SYSTEM';alter database datafile '/u01

Java线程Thread使用匿名内部类创建的两种方式

匿名内部类实现线程的两种方式: 第一种方式: 1.继承Thread类 2.重写run方法 3.将要执行的代码写在run方法中 第二种方式: 1.将Runnable的子类对象传递给Thread的构造方法 2.重写run方法 3.将执行的代码写在run方法中,最后我们开启线程 package com.yyx.thread; /** * 匿名内部类创建线程 yyx 2018年2月4日 */ public class AnonymousThread { public static void main(S

Java多线程Thread使用匿名内部类创建的两种方式

匿名内部类实现线程的两种方式: 第一种方式: 1.继承Thread类 2.重写run方法 3.将要执行的代码写在run方法中 第二种方式: 1.将Runnable的子类对象传递给Thread的构造方法 2.重写run方法 3.将执行的代码写在run方法中,最后我们开启线程 package com.yyx.thread; /** * 匿名内部类创建线程 yyx 2018年2月4日 */ public class AnonymousThread { public static void main(S

C++中对象创建的两种方式

在C++中,类的对象建立分为两种,一种是静态建立,如A a:另一种是动态建立,如A* ptr=new A:这两种方式是有区别的. 静态建立一个类对象,是由编译器为对象在栈空间中分配内存,是通过直接移动栈顶指针,挪出适当的空间,然后在这片内存空间上调用构造函数形成一个栈对象.使用这种方法,直接调用类的构造函数. 动态建立类对象,是使用new运算符将对象建立在堆空间中.这个过程分为两步,第一步是执行operator new()函数,在堆空间中搜索合适的内存并进行分配:第二步是调用构造函数构造对象,初

android回调接口的两种方式

熟悉MS-Windows和X Windows事件驱动设计模式的开发人员,通常是把一个方法的指针传递给事件源,当某一事件发生时来调用这个方法(也称为“回调”).Java的面向对象的模型目前不支持方法指针,似乎不能使用这种方便的机制. 但是java本身拥有interface,我们可以用interface实现相同的效果.在android中,如果我们需要对一个button的点击事件往外传,可以有两种实现方式. 第一种方式的大体步骤是: 1.定义一个回调接口,用来捕捉和“存放”点击事件. public i

创建数据源两种方式

第一种:直接在applicationContext.xml中配置 ...... ...... <!--创建数据源 --> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdb

生成器创建的两种方式

1,如同列表生成方式,把[]换成() 1 nums = (x*2 for x in range(10)) 2 3 for num in nums: 4 print(num) 结果: 0 2 4 6 8 10 12 14 16 18 2.函数 + yield 1 # 第二种方式 2 def creat_num(all_num): 3 a,b = 0,1 4 current_num = 0 5 while current_num < all_num: 6 yield a # 如果一个函数中有yiel

Android 生成keystore,两种方式

一.eclipse 中生成android keystore 建立任意一个android项目(例如:AntForAndroid) 右键AntForAndroid根目录弹出菜单->Android Tools -> Export Signed Application Package... Next > 第二步:创建密钥库keystore,输入密钥库导出位置和密码,记住密码,下次Use existing keystore会用到 选择"Create new keystore"并