`
cyhcheng
  • 浏览: 60067 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Menu及其自定义皮肤的处理

 
阅读更多

SimpleMenuActivity.java代码:

package org.penguin.study.android.menu;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.util.AttributeSet;
import android.view.InflateException;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

/**
 * 官方资料:http://developer.android.com/guide/topics/ui/menus.html
 * Menu资料:http://developer.android.com/guide/topics/resources/menu-resource.html
 */
public class SimpleMenuActivity extends Activity {
	private TextView messageTV;

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		messageTV = (TextView) findViewById(R.id.messageTV);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// // groupId:分组的Id,如果不用分组就用0
		// // ItemId:menu当中每一项的Id,这个Id应该是唯一的
		// // order:排列的顺序
		//
		// menu.add(0, 19991, 1, "打开").setIcon(R.drawable.icon);
		// menu.add(0, 19992, 2, "关闭").setIcon(R.drawable.delicious);
		// menu.add(0, 19993, 0, "帮助").setIcon(R.drawable.google);
		// int menuItemCounts = menu.size();
		// messageTV.setText("Menu项数:" + menuItemCounts);
		MenuInflater menuInflater = getMenuInflater();
		menuInflater.inflate(R.menu.simple_menu, menu);
		setMenuBackGround();
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		messageTV.setText(String.format("分组Id:%d、ItemId:%d、顺序:%d、标题:%s", item.getGroupId(), item.getItemId(), item.getOrder(), item.getTitle()));
		return super.onOptionsItemSelected(item);
	}

	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		System.out.println("KeyCode    ===    " + keyCode + "、" + KeyEvent.KEYCODE_BACK);
		if (keyCode == KeyEvent.KEYCODE_BACK) {
			System.out.println("模拟器中ESC键是Back键");
			// Toast.makeText(this.getApplicationContext(), "你按下了Home键",
			// Toast.LENGTH_LONG).show();
			// AlertDialog.Builder(SimpleMenuActivity.this).setTitle("提示标题").setMessage("这是提示内容").show();
			new AlertDialog.Builder(SimpleMenuActivity.this).setTitle("您确认要退出吗?").setMessage("这是提示内容").setPositiveButton("退出", new OnClickListener() {
				@Override
				public void onClick(DialogInterface dialog, int which) {
					System.out.println("1 === " + dialog.getClass() + "、" + which + "、" + Dialog.BUTTON_POSITIVE);
				}
			}).setNegativeButton("取消", new OnClickListener() {

				@Override
				public void onClick(DialogInterface dialog, int which) {
					System.out.println("2 === " + dialog.getClass() + "、" + which + "、" + Dialog.BUTTON_NEGATIVE);
				}
			}).create().show();
			return true;
		}
		return super.onKeyDown(keyCode, event);
	}

	// 核心代码:重写Layout.Factory.onCreateView()方法自定义布局
	protected void setMenuBackGround() {
		SimpleMenuActivity.this.getLayoutInflater().setFactory(new LayoutInflater.Factory() {

			@Override
			public View onCreateView(String name, Context context, AttributeSet attrs) {
				if (name.equalsIgnoreCase("com.android.internal.view.menu.IconMenuItemView")
						|| name.equalsIgnoreCase("com.android.internal.view.menu.ListMenuItemView")) {
					LayoutInflater layoutInflater = getLayoutInflater();
					try {
						final View view = layoutInflater.createView(name, null, attrs);
						new Handler().post(new Runnable() {
							@Override
							public void run() {
								view.setBackgroundColor(Color.BLUE);
								// view.setBackgroundResource(R.drawable.icon);
							}
						});
						return view;
					} catch (InflateException e) {
						System.err.println(e.getMessage());
					} catch (ClassNotFoundException e) {
						System.err.println(e.getMessage());
					}
				}
				return null;
			}
		});
	}
}

 布局文件main.xml代码:

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

 menu/simple_menu.xml代码:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
	<item android:id="@+id/openMenuItem" android:icon="@drawable/icon"
		android:title="@string/open" />
	<item android:id="@+id/helpMenuItem" android:icon="@drawable/google"
		android:title="@string/help" />
	<item android:id="@+id/closeMenuItem" android:icon="@drawable/delicious"
		android:title="@string/close" />
	<item android:title="废话1" />
	<item android:title="废话2" />
	<item android:title="废话3" />
	<item android:title="更多1" />
	<item android:title="更多2" />
	<item android:title="更多3" />
	<item android:title="更多4" />
	<item android:title="更多5" />
	<item android:title="更多6" />
	<item android:title="更多7" />
	<item android:title="更多8" />
	<item android:title="更多9" />
</menu>

至于用到的图片(ico.png、google.png、delicious.png)均为png格式,从网上随便早点就ok了。一般放到drawable-hdpi目录就ok了。

strings.xml代码:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello">有些事情,做了才有可能;如果仅是欣赏,我们只有回忆,但却不曾拥有</string>
    <string name="app_name">友好的菜单入门</string>
    <string name="help">帮助</string>
    <string name="open">打开</string>
    <string name="close">关闭</string>
</resources>
 
分享到:
评论

相关推荐

    c#winfrom皮肤的操作

    在C# WinForms应用程序开发中,皮肤(主题)的自定义和动态切换是提升用户体验...此外,对于更复杂的应用场景,可能需要设计更灵活的皮肤加载机制,例如支持远程加载皮肤文件,或者提供皮肤编辑器让用户自定义皮肤等。

    DotNetBar6.0.0.5示例

    5. **皮肤(Themes)**:DotNetBar提供了多种预设的视觉样式和主题,使得应用程序的界面看起来更专业,同时支持自定义皮肤。 6. **表单边栏(Docking)**:可以实现窗口部件的停靠功能,如创建浮动窗口、停靠到窗口...

    jsMenu多种下拉菜单

    本文将深入探讨如何利用JS实现多种下拉菜单及其相关功能,包括无限极菜单的构建、自定义配置以及换肤等特性。 1. **下拉菜单原理**: 下拉菜单是网页交互设计中的常见元素,通常由一个主菜单项触发显示或隐藏一...

    ASP.NET服务器控件开发技术与实例

    本篇文章将深入探讨ASP.NET服务器控件的开发技术及其实际应用。 1. **控件类型**: - 基本控件:如Label、TextBox、Button等,提供了网页的基本输入和显示功能。 - 数据绑定控件:如GridView、ListView、Repeater...

    ComponentArt Web.UI 2008.1 for ASP.NET Ajax 完美无限制DLL文件

    11. **皮肤和主题(Skinning and Theming)**:ComponentArt 提供了一系列预设的皮肤和主题,同时也允许开发者自定义皮肤,以满足项目的特定设计需求。 除了这些组件,ComponentArt Web.UI 还提供了强大的事件处理...

    ECMAll模板制作教程

    ECMAll模板制作教程是一个详尽的指南,旨在帮助用户理解和创建ECMAll系统的...在后续章节中,教程可能还会涵盖模块制作、皮肤编辑、动态内容处理以及模板调试等高级主题,帮助开发者更加全面地掌握ECMAll的模板系统。

    richfaces组件说明文档及使用实例

    RichFaces扩展了JSF的事件模型,提供了服务器端和客户端的自定义事件处理。`&lt;rich:componentControl&gt;`标签可用于监听和响应特定组件的事件。 5. **数据展示与处理**: RichFaces的`&lt;rich:dataTable&gt;`和`...

    ASP.NET 2.0 源代码

    8. **自定义错误处理(Custom Error Handling)**:开发者可以配置详细的错误处理页面,提升用户体验,同时方便调试。 9. **配置系统(Configuration System)**:ASP.NET 2.0的配置系统更加灵活,允许开发者在不修改...

    C#的控件

    在C#编程中,控件是构建用户界面(UI)的核心元素。它们允许开发者创建具有交互性的图形...同时,通过学习和理解控件的事件处理、数据绑定以及自定义控件等高级特性,开发者可以进一步提升应用程序的质量和用户体验。

    EasyUI API 1.3 中文

    同时,也支持自定义皮肤,以满足特定的设计需求。 9. **国际化(Internationalization, i18n)**:EasyUI 1.3 版本中,中文版的 API 为中文开发者提供了更好的本地化体验,包括组件的文本和错误消息都进行了汉化。 ...

    RadControls_For_ASPNET_AJAX帮助文档资料

    RadControls集合包括一系列的服务器端控件,如Grid、TreeView、Menu、Calendar、Chart等,它们提供了丰富的功能和自定义选项,以满足Web应用的各种需求。这些控件利用AJAX技术,实现了页面的部分更新,提高用户体验...

    ComponentArt Web UI 2008.2 for ASP.NET 3.5 Sources

    以下是对这个组件库及其相关知识点的详细说明: 1. **ComponentArt**:ComponentArt是一家知名的软件公司,专注于提供高质量的UI控件和服务。他们的Web UI库包括一系列的ASP.NET控件,如Grid、Tree、Menu、Tab等,...

    ext-3.0.0框架(带Demo)

    6. **主题和皮肤**:EXT 3.0.0支持自定义主题和皮肤,可以通过更换CSS样式来改变整个应用的外观,满足不同项目的需求。 7. **国际化支持**:EXT框架内建了国际化的支持,允许开发者轻松地将应用翻译成多种语言,...

    JQuery_EasyUI

    2. **主题支持**:框架内置了多种预设主题,可以根据项目需求轻松切换,同时也支持自定义主题,提供了一套完整的皮肤定制机制。 3. **数据绑定**:EasyUI 支持与后端数据源的双向绑定,如 JSON、XML 或者服务器的 ...

    asp.net2.0新控件

    每个步骤都可以有自己的内容和布局,Wizard控件自动处理导航逻辑,提供了一种直观的用户体验。 ### 6. Login控件 ASP.NET 2.0引入了新的身份验证和授权机制,Login控件就是其中的一部分。它简化了用户登录界面的...

    EasyUI1.36版本速查手册HandBood系列(By FengGe整理)

    1.36版可能增加了更多数据处理和展示的选项,例如行编辑、列自定义等,以满足复杂的数据展示需求。 3. **表单(Form)**:EasyUI 提供了各种表单控件,如输入框、下拉框、复选框等,可自动校验数据。开发者可以通过 `...

    PowerBuilder编程俱乐部常见问题解答

    这个"PowerBuilder编程俱乐部常见问题解答"涵盖了PowerBuilder使用过程中遇到的各种问题及其解决方案,旨在帮助开发者解决实际开发中可能遇到的难题。 1. **PowerBuilder基本概念** - **数据窗口**:PowerBuilder...

    jQuery EasyUI 常用UI组件.RAR

    以下是关于jQuery EasyUI及其常用组件的详细说明: 1. **基本概念**: - **jQuery**:jQuery是一个轻量级、高性能的JavaScript库,简化了HTML文档遍历、事件处理、动画以及Ajax交互。 - **EasyUI**:基于jQuery的...

Global site tag (gtag.js) - Google Analytics