`
chenqiang5206
  • 浏览: 33091 次
  • 性别: Icon_minigender_1
  • 来自: 江西
社区版块
存档分类

初学Android,使用菜单资源(十九)

阅读更多

Android里面也可用XML定义菜单资源,菜单分两种,一种是OptionMenu(点系统"Menu"键出来),一种是ContextMenu

下面定义两种菜单XML到res\menu文件夹下

my_menu为OptionMenu

 

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
  <item android:title="@string/font_size"
    android:icon="@drawable/font">
    <menu>
      <!-- 定义一组单选菜单项 -->
      <group android:checkableBehavior="single">
        <!-- 定义多个菜单项 -->
        <item android:id="@+id/font_10"
           android:title="@string/font_10"/>
        <item android:id="@+id/font_12"
           android:title="@string/font_12"/>
        <item android:id="@+id/font_14"
           android:title="@string/font_14"/>
        <item android:id="@+id/font_16"
           android:title="@string/font_16"/>
        <item android:id="@+id/font_18"
           android:title="@string/font_18"/>
      </group>
    </menu>
  </item>
  <item>
  </item>
  <!-- 定义一个普通菜单项 -->
  <item android:id="@+id/plain_item"
     android:title="@string/plain_item">
  </item>
  <item android:id="@string/font_color"
     android:title="@drawable/color">
    <menu>
      <!-- 定义一组普通的菜单项 -->
      <group>
        <!-- 定义3个菜单项 -->
        <item android:id="@+id/red_font"
          android:title="@string/red_title"/>
        <item android:id="@+id/green_font"
          android:title="@string/green_title"/>
        <item android:id="@+id/blue_font"
          android:title="@string/blue_title"/>
      </group>
    </menu>
  </item>
</menu>

context.xml为ContextMenu

 

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <!-- 定义一组单选菜单项目 -->
    <group android:checkableBehavior="single">
        <!-- 定义三个菜单项 -->
        <item android:id="@+id/red"
            android:title="@string/red_title"
            android:alphabeticShortcut="r"></item>
        <item android:id="@+id/green"
            android:title="@string/green_title"
            android:alphabeticShortcut="g"></item>
        <item android:id="@+id/blue"
            android:title="@string/blue_title"
            android:alphabeticShortcut="b"></item>
    </group>
</menu>

定义两个res\value下的xml,用来指定颜色,字体

colors.xml

 

<?xml version="1.0" encoding="UTF-8"?>
<resources>
	<color name="red">#ff0000</color>
	<color name="green">#00ff00</color>
	<color name="blue">#0000ff</color>
</resources>


strings.xml

 

<?xml version="1.0" encoding="utf-8"?>
<resources>
	<string name="hello">Hello World, ContextMenuTest!</string>
	<string name="app_name">上下文菜单</string>
	<string name="red_title">红色</string>
	<string name="blue_title">蓝色</string>
	<string name="green_title">绿色</string>
	<string name="font_size">字体大小</string>
	<string name="font_color">字体颜色</string>		
	<string name="plain_item">普通菜单项</string>
	<string name="font_10">10号字体</string>	
	<string name="font_12">12号字体</string>	
	<string name="font_14">14号字体</string>	
	<string name="font_16">16号字体</string>	
	<string name="font_18">18号字体</string>	
</resources>


下面代码将实现两种菜单

 

package WangLi.Resource.MenuResTest;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

public class MenuResTest extends Activity {
    /** Called when the activity is first created. */
	private TextView txt;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        txt = (TextView)findViewById(R.id.txt);
        //为文本框注册上下文菜单
        registerForContextMenu(txt);
    }

    public boolean onCreateOptionsMenu(Menu menu)
    {
    	MenuInflater inflator = new MenuInflater(this);
    	//装填R.menu.my_menu对应的菜单,并添加到menu中
    	inflator.inflate(R.menu.my_menu, menu);
    	return super.onCreateOptionsMenu(menu);
    }
    
    //每次创建上下文菜单时都会触发该方法
    public void onCreateContextMenu(ContextMenu menu,View source,
    		ContextMenu.ContextMenuInfo menuInfo)
    {
    	MenuInflater inflator = new MenuInflater(this);
    	//装填R.menu.context对应的菜单,并添加到menu中
    	inflator.inflate(R.menu.context, menu);
    	menu.setHeaderIcon(R.drawable.tools);
    	menu.setHeaderTitle("请选择背景色");
    }
    
    //上下文菜单中菜单项被单击时触发该方法
    public boolean onContextItemSelected(MenuItem mi)
    {
    	switch(mi.getItemId())
    	{
    	    case R.id.red:
    		    mi.setChecked(true);
    		    txt.setBackgroundColor(Color.RED);
    		    break;
    	    case R.id.green:
    	    	mi.setChecked(true);
    	    	txt.setBackgroundColor(Color.GREEN);
    	    	break;
    	    case R.id.blue:
    	    	mi.setChecked(true);
    	    	txt.setBackgroundColor(Color.BLUE);
    	    	break;
    	}
    	return true;
    }
    
    //菜单项被单击后的回调方法
    public boolean onOptionsItemSelected(MenuItem mi)
    {
    	//判断单击的是哪个菜单项,并针对性地做出响应
    	switch(mi.getItemId())
    	{
    	    case R.id.font_10:
    		    txt.setTextSize(10*2);
    		    break;
    	    case R.id.font_12:
    		    txt.setTextSize(12*2);
    		    break;
    	    case R.id.font_14:
    		    txt.setTextSize(14*2);
    		    break;
    	    case R.id.font_16:
    		    txt.setTextSize(16*2);
    		    break;
    	    case R.id.font_18:
    		    txt.setTextSize(18*2);
    		    break;
    	    case R.id.red_font:
    		    txt.setTextColor(Color.RED);
    		    mi.setChecked(true);
    		    break;
    	    case R.id.green_font:
    		    txt.setTextColor(Color.GREEN);
    		    mi.setChecked(true);
    		    break;
    	    case R.id.blue_font:
    		    txt.setTextColor(Color.BLUE);
    		    mi.setChecked(true);
    		    break;
    	    case R.id.plain_item:
    	    	Toast toast = Toast.makeText(MenuResTest.this, "您单击了普通项菜单", Toast.LENGTH_SHORT);
    	    	toast.show();
    	    	break;
    	}
    	return true;
    }
}


下面是程序运行效果图,刚启动时是一个TextView


点击后,在手机屏幕下方出现OptionMenu

点击字体大小或普通菜单项,出现子菜单

选择就可改变TextView的字体

如下点击"普通菜单项",会出现一个Toast提示,过几秒就会消失

那么怎么弹出ContextMenu呢,就是对着TextView长按就可以了

选择后,背景色就改变了


分享到:
评论

相关推荐

    Android底部菜单栏

    其中,`app:menu`属性引用了一个菜单资源文件(`bottom_navigation_menu.xml`),在这个文件中定义了各个底部菜单项。 接下来,我们需要在`bottom_navigation_menu.xml`中定义菜单项: ```xml &lt;menu xmlns:android...

    Android图文菜单制作实例源码.rar

    Android菜单通常在`res/menu`目录下的XML文件中定义。每个菜单项可以通过`&lt;item&gt;`标签创建,其中可以包含`android:title`(标题)、`android:icon`(图标)等属性。在这个实例中,我们可能会看到如何在XML中定义...

    AndroidStudio-实战演练-仿美团外卖菜单全部代码,加图片资源

    在本项目中,我们主要关注的是使用Android Studio进行实战演练,目标是仿造美团外卖的菜单功能。这个压缩包包含了实现这一目标所需的所有代码和图片资源。以下是对这些关键元素的详细解读: 1. **Android Studio**:...

    android menu菜单使用

    首先,要使用Android菜单,我们需要在布局文件(如`activity_main.xml`)中不直接添加菜单元素,因为菜单通常在活动中动态生成。菜单的定义主要在`res/menu`目录下的XML文件中完成,例如`menu_main.xml`。在这个文件...

    Android顶部滑动菜单

    在创建顶部滑动菜单的过程中,你还需要自定义一个TabLayout,它可以是AppCompatActivity的扩展或者使用Android Support Library中的TabLayout组件。TabLayout可以和ViewPager结合,通过设置Tab的标签和图标,来实现...

    Android圆形旋转菜单CircleMenu.zip

    《Android圆形旋转菜单——CircleMenu.zip深度解析》 在Android应用开发中,用户界面的设计是至关重要的,一个吸引人的、易用的界面可以极大地提升用户体验。"CircleMenu"是一款独特的UI组件,它以圆形的方式展示...

    Android_菜单(Menu)控件的使用.pdf

    首先,要在Android项目中使用菜单,需要在资源目录(res)下创建一个名为menu的文件夹,并在该文件夹中添加XML布局文件来定义菜单项。例如,可以创建一个名为menu.xml的文件,并使用XML标签来定义菜单项。每个菜单项...

    android弹出菜单演示

    "android弹出菜单演示"这个项目是关于如何使用PopupWindow来创建一个类似QuickAction的菜单,这些菜单通常用于在主视图上快速执行操作。下面将详细讲解相关的知识点。 首先,PopupWindow是Android SDK提供的一种...

    Android底部导航菜单栏TabHost

    - 在布局文件中添加BottomNavigationView,并设置对应的菜单资源文件。 - 在Activity中监听BottomNavigationView的选中状态,通过onNavigationItemSelectedListener更新界面内容。 ```xml &lt;!-- layout.xml --&gt; ...

    Android双向侧滑菜单 自定义控件

    在Android应用开发中,侧滑菜单(DrawerLayout)是一种常见的设计模式,用于提供导航和功能选项。本实例代码着重讲解如何实现一个支持双向侧滑的自定义控件,即不仅可从左侧滑出,也能从右侧滑出。下面将详细阐述...

    Android圆形旋转菜单.zip源码资源下载

    在【压缩包子文件的文件名称列表】中,我们只有一个条目“Android圆形旋转菜单”,这可能是一个包含所有必要文件的目录,如Java源代码文件(.java)、布局文件(.xml)、资源文件(如图片、音频、字符串资源等)、...

    老罗android视频开发源码和ppt--android菜单的使用.rar

    本资源“老罗android视频开发源码和ppt--android菜单的使用.rar”是由知名的Android开发者罗升阳(也被大家亲切地称为老罗)制作的,旨在帮助开发者深入理解和实际运用Android菜单功能。 首先,让我们来探讨一下...

    Android menu单选菜单.zip

    在这个“Android menu单选菜单.zip”压缩包中,包含了一个简单的Android单选菜单(Radio Menu)的源码示例,非常适合初学者理解和实践。 单选菜单(Radio Menu)在Android中通常由`RadioGroup`和`RadioButton`组成...

    android三级菜单实现

    在Android开发中,创建层级结构丰富的用户界面是常见的需求,...对于经验丰富的开发者,这则是一个优化和改进的机会,比如考虑使用现代的布局管理器,如`RecyclerView`的嵌套使用,以实现更灵活和高性能的菜单系统。

    Android 透明菜单源码.zip

    8. **兼容性**:确保透明菜单在不同版本的Android系统上都能正常工作,可能需要针对API级别进行适配,如使用`Support Library`或`AndroidX`来兼容低版本设备。 总的来说,“Android 透明菜单源码”项目将提供一个...

    android菜单Demo

    本示例“android菜单Demo”旨在帮助初学者理解并掌握如何在Android应用中创建和使用各种类型的菜单。 首先,我们要了解Android中的菜单类型主要有三种:选项菜单(Option Menu)、上下文菜单(Context Menu)和弹出...

    android快捷菜单源程序

    对于初学者来说,通过分析这个项目的代码,不仅可以理解Context Menu的工作原理,还能了解到Android中的事件监听、菜单资源的使用等基本概念。 学习这个项目后,你还可以尝试扩展功能,例如添加动画效果,或者将...

    android 侧拉菜单

    在Android应用开发中,侧拉菜单(通常称为滑动抽屉或Navigation Drawer)是一个非常常见的设计模式,它允许用户从屏幕边缘滑出一个菜单来访问不同的功能或导航选项。这个侧拉菜单通常包含一个列表视图,显示了多个可...

    Android菜单menu代码

    在本教程中,我们将深入探讨如何创建和使用Android菜单,这将是一个非常适合初学者的实践项目。 首先,让我们了解菜单的基本结构。在Android中,菜单通常在`res/menu`目录下定义,以XML文件的形式存在。例如,你...

Global site tag (gtag.js) - Google Analytics