1、activity_main.xml

  描述:

    定义了一个按钮

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<TextView
android:id="@+id/mainText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="XML构建菜单"
android:onClick="test_1"
/> </LinearLayout>

2、MainActivity.java

  描述:

    通过代码创建选项菜单

    将某个菜单进行隐藏

    根据选择的项弹出对应的提示信息

    根据选择的项改变文本颜色

package com.nf.android_menu_2;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SubMenu;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast; public class MainActivity extends Activity {
private TextView mainText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mainText = (TextView)findViewById(R.id.mainText);
}
public void test_1(View view){
Intent intent = new Intent(this,Main2Activity.class);
startActivity(intent);
}
//-------------------通过代码创建选项菜单-----------------------------
//1、创建选项菜单
@Override
public boolean onCreateOptionsMenu(Menu menu){
     //此方法用于初始化菜单,其中menu参数就是即将要显示的Menu实例。 返回true则显示该menu,false 则不显示;
     //(只会在第一次初始化菜单时调用)
        Intent intent = new Intent(this,MainActivity.class);
intent.putExtra("message","Hello");
     //添加菜单项
menu.add(0,0,0,"新建").setIntent(intent);
menu.add(0,1,1,"打开");
menu.add(1,2,0,"保存");
//添加子菜单
SubMenu sbMenu = menu.addSubMenu("颜色");
sbMenu.add(11,4,0,"红色");
sbMenu.add(11,5,1,"黄色");
sbMenu.add(11,6,2,"绿色");
menu.add(1,3,1,"退出");
     //调用父类的onCreateOptionMenu()方法创建菜单
return super.onCreateOptionsMenu(menu);
}
//2、选项菜单打开之前执行操作
@Override
public boolean onPrepareOptionsMenu(Menu menu){
//菜单打开前进行一些设置
     //将菜单第一项设置为隐藏,即“新建”被隐藏
menu.getItem(0).setEnabled(false);
     //调用父类的onPrepareOptionsMenu()方法实现
return super.onPrepareOptionsMenu(menu);
}
//3、选项菜单中菜单项被选中
@Override
public boolean onOptionsItemSelected(MenuItem item){
     //获取向的id
switch (item.getItemId()){
       
case 1:
Toast.makeText(this,"你选中了打开",Toast.LENGTH_SHORT).show();
break;
case 2:
Toast.makeText(this,"你选中了保存",Toast.LENGTH_SHORT).show();
break;
case 3:
Toast.makeText(this,"你选中了退出",Toast.LENGTH_SHORT).show();
this.finish();//窗口关闭
//System.exit(0);//系统安全退出
break;
       //子菜单
case 4:
         //将主界面上的文本内容的颜色设置为红色 --即将“Hello world”设置为红色
mainText.setTextColor(Color.RED);
break;
case 5:
         //将主界面上的文本内容的颜色设置为黄色
mainText.setTextColor(Color.YELLOW);
break;
case 6:
         //绿色
mainText.setTextColor(Color.GREEN);
break;
}
return super.onOptionsItemSelected(item);
}
}

3、activity_main2.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/activity_main2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/searchText"
/>
</LinearLayout>

4、Main2Activity.java

  描述:

    1、设置返回上级页面按钮

       按钮上显示图标

    2、搜索框的设置

       搜索框是否可见问题

       搜索框获取焦点事件

       搜索内容改变事件

    3、返回上一级页面功能

package com.nf.android_menu_2;

import android.app.ActionBar;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.SearchView;
import android.widget.TextView; import java.lang.reflect.Method; public class Main2Activity extends Activity {
private TextView searchText;
//SearchView是Android原生的搜索框控件,它提供了一个用户界面,用于用户搜索查询
/**
SearchView属性 属性名称 相关方法 描述
android:iconifiedByDefault setIconifiedByDefault(boolean) 设置搜索图标是否显示在搜索框内
android:imeOptions setImeOptions(int) 设置输入法搜索选项字段,默认是搜索,可以是:下一页、发送、完成等
android:inputType setInputType(int) 设置输入类型
android:maxWidth setMaxWidth(int) 设置最大宽度
android:queryHint setQueryHint(CharSequence) 设置查询提示字符串
*/
private SearchView search; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
     //创建导航栏并给导航栏设置返回上一级界面按钮
ActionBar bar = getActionBar();
if (bar!=null){
       //设置显示返回主界面按钮
bar.setHomeButtonEnabled(true);
       //设置显示返回上一级按钮
bar.setDisplayHomeAsUpEnabled(true);
}
searchText = (TextView)findViewById(R.id.searchText);
}
@Override
public boolean onCreateOptionsMenu(Menu menu){
     //当创建菜单时调用被类中最下面定义好的setIconEnable()方法传入参数,设置显示图像
setIconEnable(menu,true);//设置显示图像       //目录中创建了一个专门放menu资源的鹅menu包,包中创建了一个menu_option.xml文件,这里将那个文件投影进来
     //将菜单资源文件投影进来
getMenuInflater().inflate(R.menu.menu_option,menu);
//先取出资源文件中的搜索项search
MenuItem item = menu.findItem(R.id.search);
//从Item中取出绑定的SearchView搜索框控件
search = (SearchView)item.getActionView();
//给搜索控件绑定获取焦点事件
search.setOnQueryTextFocusChangeListener(new View.OnFocusChangeListener(){
@Override
public void onFocusChange(View v,boolean hasFocus){
if (hasFocus){
            //如果获得焦点则将searchText的设置为可见
searchText.setVisibility(TextView.VISIBLE);
}else{
            //否则设置为隐藏
searchText.setVisibility(TextView.GONE);
}
}
});
     //给搜索控件绑定查询文本内容事件
search.setOnQueryTextListener(new SearchView.OnQueryTextListener(){
@Override
public boolean onQueryTextSubmit(String query){
return false;
}
       //如果控件中文本内容发生改变则,在searchText中将“搜索:内容”显示出来
@Override
public boolean onQueryTextChange(String newText){
searchText.setText("搜索:"+newText);
return false;
}
});
return super.onCreateOptionsMenu(menu);
}   //当用户点击menu item,将会触发onOptionItemSelected()回调函数
  //控制返回上一级菜单的方法
@Override
public boolean onOptionsItemSelected(MenuItem item){
      //通过itemId判断具体是那个菜单项被用户点击
     //当用户点击了左上角的返回按钮,与系统中的返回键的id匹配,则finish 
if (item.getItemId() == android.R.id.home)
this.finish();
return super.onOptionsItemSelected(item);
}
//通过反射获取menu,然后修改属性设置图像可以显示
private void setIconEnable(Menu menu,boolean enable){
try{
Class<?> clazz = Class.forName("com.android.internal.view.menu.MenuBuilder");
       //通过setAccessible()方法设置为true,才能进一步设置菜单的图标显示问题
       //修改访问修饰符,让方法可以被访问
Method m = clazz.getDeclaredMethod("setOptionalIconsVisible",boolean.class);
m.setAccessible(true);
//下面传入参数,要想给方法传参必须得能够访问这个方法,所以上面必须修改访问修饰符,在上面创建菜单时调用了setIconEnable()方法,传了true
m.invoke(menu,enable);
}catch (Exception e){
e.printStackTrace();
}
} }

5、menu/menu_option.xml

  描述:

    showAsAction的值有三个选项:

      always:总是显示在界面上 
      never:不显示在界面上,只让出现在右边的三个点中 
      ifRoom:如果有位置才显示,不然就出现在右边的三个点中 

    通过效果图你会发现showAsAction设置了always的项,则会在最顶部显示,没有设置的则被隐藏在那三个点中,点击三个点的地方才可以看见   

   android:actionViewClass="android.widget.SearchView" ---设置一个搜索框
   睡觉菜单中再嵌套菜单
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"> <item
android:id="@+id/search"
android:actionViewClass="android.widget.SearchView"
android:title="搜索"
android:showAsAction="always"
/>
<item
android:id="@+id/m1"
android:title="吃饭"
android:showAsAction="always"
/>
<item
android:id="@+id/m2"
android:icon="@mipmap/ic_launcher"
android:title="睡觉">
<menu>
<item android:id="@+id/m2_1"
android:title="宿舍"
/>
<item android:id="@+id/m2_2"
android:title="教室"
/>
<item android:id="@+id/m2_3"
android:title="走廊"
/>
</menu>
</item>
<item
android:id="@+id/m3"
android:icon="@mipmap/ic_launcher"
android:title="打豆豆"
/>
<item
android:id="@+id/m4"
android:icon="@mipmap/ic_launcher"
android:title="退出"
/>
</menu>

Android开发 ---代码创建选项菜单、隐藏菜单项、菜单的生命周期,菜单按钮图标设置、搜索框、xml中设置子菜单的更多相关文章

  1. Android开发代码规范(转)

    Android开发代码规范 1.命名基本原则    在面向对象编程中,对于类,对象,方法,变量等方面的命名是非常有技巧的.比如,大小写的区分,使用不同字母开头等等.但究其本,追其源,在为一个资源其名称 ...

  2. 黑客破译android开发代码真就那么简单?

    很多程序员辛辛苦苦开发出的android开发代码,很容易就被黑客翻译了. Google似乎也发现了这个问题,从SDK2.3开始我们可以看到在android-sdk-windows\tools\下面多了 ...

  3. android 开发代码被黑客破译有那么容易吗?

    很多程序员辛辛苦苦开发出的android开发代码,很容易就被黑客翻译了. Google似乎也发现了这个问题,从SDK2.3开始我们可以看到在android-sdk-windows\tools\下面多了 ...

  4. Android开发 --代码布局

    Android开发 --代码布局 在线性布局LinearLayout里加入view比较简单,因为属性比较少,布局简单 示例,加入一个TextView LinearLayout layout = (Li ...

  5. 13、Java菜单条、菜单、菜单项

    13.Java菜单条.菜单.菜单项 一般用Java做界面时,都得牵涉到菜单条.菜单.菜单项的设计.菜单项放在菜单里,菜单放在菜单条里,且其字体均可设置. 13.1.菜单条(Menubar) Frame ...

  6. 在Unity3d编辑器中加入菜单以及菜单项

    在引用UZGUI插件时,u3d编辑器的菜单条发生了变化,新增了菜单和菜单项,于是乎自己也像尝试一下,看了EZGUI的About_EZ_GUI脚本文件后,结果大出我所料,原来SO EASY! using ...

  7. e815. 监听当前选择的的菜单或菜单项

    The currently selected menu or menu item in a JMenu or JPopupMenu is tracked by MenuSelectionManager ...

  8. SpringMVC内容略多 有用 熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器、过滤器等Web组件以及MVC架构模式进行Java Web项目开发的经验。

    熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器.过滤器等Web组件以及MVC架构 ...

  9. Android DevArt2:Android 5.0下 Dialog&AlertDialog 并不会影响Activity的生命周期

    先给出结论:Dialog和AlertDialog并不会影响到Activity的生命周期,但会影响到Activity的优先级. 核心代码: onCreated中: Resources resources ...

随机推荐

  1. VCS

    timing check相关的, +notimingcheck命令,可以用在compile时,也可以用在run time的时候, 都是将检查timing的系统函数,都disable掉了, 加在comp ...

  2. 单源最短路——Dijkstara算法

    算法基本思想:每次找到离源点最近的一个顶点,然后以该顶点为中心进行扩展,最终得到源点到其余所有点的最短路径. 1.将所有的顶点分为两个部分:已知最短路程的顶点集合P和未知最短路径的顶点集合Q 2.设置 ...

  3. 【数据使用】3k水稻数据库现成SNP的使用

    ---恢复内容开始--- 我们经常说幻想着使用已有数据发表高分文章,的确,这样的童话故事每天都在发生,但如何走出第一步我们很多小伙伴不清楚,那么我们就从水稻SNP数据库的使用来讲起. http://s ...

  4. 安装Joomla!3

    在日常测试中搭建一个web 站点进行进行linux 相关功能测试,只是不喜欢httpd 或者nginx 的默认界面: 安装Joomla!3: 系统:centos 7 软件:  连接: https:// ...

  5. Linux 组管理、权限

    权限说明 1. 组涉及到两个配置文件,组文件/etc/group,组密码管理员/etc/gshadow/,GID500往后的算普通组. 2.主组与附属组,当创建一个用户,没有制定,用户会默认创建一个与 ...

  6. Linux mail 邮件发送

    Linux mail 邮件介绍 在Linux系统下我们可以通过”mail“命令,发送邮件,在运维中通常我们它来实现邮件告警. 安装 (方案1) 一.安装邮件服务 yum install -y send ...

  7. Mybaties 实现批量修改

    通常我们在做批量更新的时候都会用in 去操作,但in的数据量一上来,就变的缓慢了 修改方案: <update id="updateShufflingSeq" paramete ...

  8. 剑指offer(33)丑数

    题目描述 把只包含因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含因子7. 习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数. 题目分析 ...

  9. Linux常用命令——压缩解压命令

    Linux常用命令——压缩解压命令 Linux  gzip 描述:压缩文件 语法:gzip [文件名] 压缩后文件格式:.gz gunzip 描述:解压后缀为.gz的文件 语法:gunzip [文件名 ...

  10. 关于MVC RouteExistingFiles疑问后续

    前两天写了<关于MVC RouteExistingFiles疑问>,本来希望寻求大佬快速解答,奈何无人问津. 只能查看.NET 源代码,可以使用反编译工具(我用IL spy),也可以在线查 ...