zoukankan      html  css  js  c++  java
  • Android开发 ---代码创建选项菜单、隐藏菜单项、菜单的生命周期,菜单按钮图标设置、搜索框、xml中设置子菜单

    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>
    如果您发现博客内容有什么错误,请您下方留言
  • 相关阅读:
    python上下文管理器
    python文件处理
    python爬虫之路(一)-----requests库详解
    深入理解http(四)----http补充
    深入理解http(三)----http进阶hhtps
    深入理解http(二)------http的缓存机制及原理
    深入理解http(一)
    XML学习之路(二)
    Nginx 编译安装-1.61.1
    LVS-DR 模式
  • 原文地址:https://www.cnblogs.com/zn615/p/8241529.html
Copyright © 2011-2022 走看看