Android入门之SubMenu的实现详解

简介

我们延用在上一篇Menu篇里的例子,把这个ContextMenu里套一层子菜单。

其实,它的原理很简单。

就是在ContextMenu的:public void onCreateContextMenu方法里,用inflator.inflate(R.menu.sub_menu, menu);加载一个外部的sub_menu。

项目结构

很简单,一点不难。来看代码。

前端代码

sub_menu.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
 <item android:id="@+id/submenu" android:title="子菜单使用演示~">
 <menu>
 <group android:checkableBehavior = "none">
 <item android:id="@+id/one" android:title = "子菜单一"/>
 <item android:id="@+id/two" android:title = "子菜单二"/>
 <item android:id="@+id/three" android:title = "子菜单三"/>
 </group>
 </menu>
 </item>
</menu>

后端代码

MainActivity.java

package org.mk.android.demosubmenu;
 
import androidx.appcompat.app.AppCompatActivity;
 
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
 
public class MainActivity extends AppCompatActivity {
 private Button btnShowMenu;
 private TextView viewContext;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 viewContext=(TextView)findViewById(R.id.viewContext);
 registerForContextMenu(viewContext);
 }
 @Override
 //重写上下文菜单的创建方法
 public void onCreateContextMenu(ContextMenu menu, View v,
 ContextMenu.ContextMenuInfo menuInfo) {
 
 //子菜单部分:
 MenuInflater inflator = new MenuInflater(this);
 inflator.inflate(R.menu.sub_menu, menu);
 super.onCreateContextMenu(menu, v, menuInfo);
 
 
 }
 
 //上下文菜单被点击是触发该方法
 @Override
 public boolean onContextItemSelected(MenuItem item) {
 
 
 switch (item.getItemId()) {
 case R.id.one:
 Toast.makeText(MainActivity.this,"你点击了子菜单一",Toast.LENGTH_SHORT).show();
 break;
 case R.id.two:
 item.setCheckable(true);
 Toast.makeText(MainActivity.this,"你点击了子菜单二",Toast.LENGTH_SHORT).show();
 break;
 case R.id.three:
 Toast.makeText(MainActivity.this,"你点击了子菜单三",Toast.LENGTH_SHORT).show();
 item.setCheckable(true);
 break;
 }
 return true;
 
 }
}

运行效果

我们以Toast来显示不同的子菜单选择后的效果即可。

作者:TGITCIC原文地址:https://blog.csdn.net/lifetragedy/article/details/128028872

%s 个评论

要回复文章请先登录注册