Android 之路32---Menu

导读

1.Menu的简介与分类
2.Menu的创建
3.Menu点击事件的三种处理方法
4.子菜单添加问题
5.关于LayoutInFlater的拓展



三种菜单都有这两种创建方式,两种方法的差别在于,第一种菜单项是在xml文件中创建的,再在java文件中注册,而第二种方法创建,注册都在java文件中

选项菜单

第一种方法

主界面布局文件

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.hala.view01.MainActivity">

    <TextView
        android:id="@+id/tx1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/myLove"/>

</android.support.constraint.ConstraintLayout>

菜单布局文件

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:id="@+id/it1"
        android:title="hala"
        android:orderInCategory="3"></item>

    <item
        android:id="@+id/it2"
        android:title="clarke"></item>
    <item
        android:id="@+id/it3"
        android:title="emilia"></item>
    <!--1.每个item就是一个选项
    2.item可以设置一系列属性
    3.orderInCategory="3"表示该选项出现的位置-->
</menu>

java文件

package com.hala.view01;

import android.content.Intent;
import android.icu.util.Calendar;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.IdRes;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;

import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.RatingBar;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.TimePicker;
import android.widget.Toast;
import android.widget.ToggleButton;

public class MainActivity extends AppCompatActivity {


    private TextView tx;
    private float fontSize=30.0f;
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        tx=(TextView)findViewById(R.id.tx1);
        tx.setTextSize(fontSize);
    }


    /**
     * 表示activity创建选项菜单时回调的方法
     * @param menu
     * @return
     *      true 用来显示菜单项
     *      false 无法显示菜单项
     */
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        //获取菜单填充器对象
        MenuInflater it=getMenuInflater();
        //第一个参数:菜单xml文件的地址,第二个参数:括号里的参数
        it.inflate(R.menu.main,menu);
        //简写  getMenuInflater().inflater(R.menu.main,menu);
        return true;
    }
}

显示结果

第二种方法

主界面布局文件

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.hala.view01.MainActivity">

    <TextView
        android:id="@+id/tx1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/myLove"/>

</android.support.constraint.ConstraintLayout>

java文件

package com.hala.view01;

import android.content.Intent;
import android.graphics.Color;
import android.icu.util.Calendar;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.IdRes;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;

import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.RatingBar;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.TimePicker;
import android.widget.Toast;
import android.widget.ToggleButton;



public class MainActivity extends AppCompatActivity {


    private TextView tx;
    private float fontSize=30.0f;
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        tx=(TextView)findViewById(R.id.tx1);
        tx.setTextSize(fontSize);
    }


    /**
     * 表示activity创建选项菜单时回调的方法
     * @param menu
     * @return
     *      true 用来显示菜单项
     *      false 无法显示菜单项
     */
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        //获取菜单填充器对象
        MenuInflater it=getMenuInflater();
        //第一个参数:菜单xml文件的地址,第二个参数:括号里的参数
        it.inflate(R.menu.main,menu);
        //简写  getMenuInflater().inflater(R.menu.main,menu);

        /*
     menu.add(groupId 菜单项分组(int型),ItemId 菜单项唯一标示id(需要在前边声明一个int型常数),order 菜单项的排序(int类型),菜单的文本)
         */
        menu.add(Menu.NONE,1,Menu.NONE,"改变字体大小");
        menu.add(Menu.NONE,2,Menu.NONE,"emilia");
        menu.add(Menu.NONE,3,Menu.NONE,"改变字体颜色");

        return true;
    }

    /**
     * 表示当选项菜单z中的item被选中时回调的方法
     * @param item 表示菜单项对象
     * @return
     *      true 对该项事件进行处理
     *      false 对该项事件不进行处理
     */
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int itemId=item.getItemId();//获取当前点击项目的id
        switch(itemId){
            //如果这里是xml方式写的item,这里case后可写 R.id.it1
            case 1:
                fontSize+=5;
                tx.setTextSize(fontSize);
               break;
            case 2:
                Toast.makeText(MainActivity.this, "love u", Toast.LENGTH_SHORT).show();
                break;
            case 3:
                //这里random产生0~1的随机数,包括0但不包括1
                int red=(int)(Math.random()*256);
                int green=(int)(Math.random()*256);
                int blue=(int)(Math.random()*256);
                //设置颜色的一种写法,也可以直接写数字
                tx.setTextColor(Color.rgb(red,green,blue));
                break;
        }
        return super.onOptionsItemSelected(item);
    }
}

显示结果

上下文菜单

1。代码显示的是第一种方法,注意代码中的tc是一个TextView控件,用来绑定菜单。
2。点击事件处理采用的的是其独有的方法,类似选项菜单的第一种处理方法(见Menu点击事件的三种处理方法->第一种)
3。第二种方法就是在onCreateContextMenu方法中加入add()方法

弹出菜单

代码显示的是第一种方法,并且点击事件处理方法用的是第三种。
第二种方法要在onCreatePanelMenu方法中用add()编写

第一种

通过onOptionsItemSelected方法,如上Menu的创建->选项菜单->第二种方法->java文件所示,注意这种方法只适用于处理选项菜单,而后两种方法适用于三种菜单

第二种

第三种

子菜单添加问题

菜单布局文件

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:title="hala"
        android:orderInCategory="3">
        <menu>
            <item
                android:id="@+id/it1"
                android:title="@string/app_name"></item>
            <item
                android:id="@+id/it3"
                android:title="i love u"></item>
        </menu>
    </item>

    <item
        android:id="@+id/it2"
        android:title="clarke"></item>
    <item
        android:title="emilia"></item>

</menu>

java文件

package com.hala.view01;

import android.content.Intent;
import android.graphics.Color;
import android.icu.util.Calendar;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.IdRes;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;

import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.RatingBar;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.TimePicker;
import android.widget.Toast;
import android.widget.ToggleButton;



public class MainActivity extends AppCompatActivity {


    private TextView tx;
    private float fontSize=30.0f;
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        tx=(TextView)findViewById(R.id.tx1);
        tx.setTextSize(fontSize);
    }


    /**
     * 表示activity创建选项菜单时回调的方法
     * @param menu
     * @return
     *      true 用来显示菜单项
     *      false 无法显示菜单项
     */
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

          getMenuInflater().inflate(R.menu.main,menu);

        return true;
    }

    /**
     * 表示当选项菜单z中的item被选中时回调的方法
     * @param item 表示菜单项对象
     * @return
     *      true 对该项事件进行处理
     *      false 对该项事件不进行处理
     */
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int itemId=item.getItemId();//获取当前点击项目的id
        switch(itemId){
            //如果这里是xml方式写的item,这里case后可写 R.id.it1
            case R.id.it1:
                fontSize+=5;
                tx.setTextSize(fontSize);
               break;
            case R.id.it2:
                Toast.makeText(MainActivity.this, "love u", Toast.LENGTH_SHORT).show();
                break;
            case R.id.it3:
                //这里random产生0~1的随机数,包括0但不包括1
                int red=(int)(Math.random()*256);
                int green=(int)(Math.random()*256);
                int blue=(int)(Math.random()*256);
                //设置颜色的一种写法,也可以直接写数字
                tx.setTextColor(Color.rgb(red,green,blue));
                break;
        }
        return super.onOptionsItemSelected(item);
    }


}

显示结果

关于LayoutInFlater的拓展

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值