android menu布局Studio怎么新建menu布局文件

安卓开发入门:添加工具栏(Action Bar) - 推酷
安卓开发入门:添加工具栏(Action Bar)
本文针对Android3.0及以上。主要是官方文档的翻译加上我自己的理解。对应于官方文档的develop -- Training -- Adding the Action Bar
1.添加工具栏
2.添加工具栏按钮
& & 2.1 工具栏布局
2.2添加工具栏按钮的步骤
3.定制工具栏外观
3.1 使用内置的主题
3.2 自定义背景颜色
3.3 自定义文本颜色
3.3.1 自定义工具栏标题文本颜色
3.3.2 自定义选项卡和按钮的文本颜色
3.3.3 自定义Tab Indicator
4. 工具栏重叠模式
1. 添加工具栏(Activity Bar)
添加一个工具栏需要你的app所使用的activity theme(活动主题)本身支持工具栏。从Android 3.0(API level 11)开始,所有使用Theme.Holo主题(以及它的扩展主题)的activity默认包含了工具栏。而如果你app targetSdkVersion或者minSdkVersion属性设置为“11”及以上的话,它默认的主题风格就是Theme.Hplp。所以我们现在创建的安卓activity都是默认带工具栏的。
OK,为你的activity建立一个工具栏就这么简单,保证你的工程是为Android 3.0以上建议的就行。不需要任何其他附件操作。现在我们用ADT或者Android Studio创建的activity默认都是带工具栏的。Android2.x需要额外的步骤,详情参考官方文档。
默认创建的一个activity,看起来是这样的:
除了一个图标和app名称,没有按钮,也不能响应事件。
注意:如果你要使用自定义主题,保证你的主题继承自Theme.Holo就行。
2. 为工具栏添加按钮
上面的工具栏除了一个标题和图标,什么也没用。现在我们来为它添加按钮。
但是,但是,在此之前,我们先来了解一下工具栏上有哪些东东。
2.1 工具栏布局
工具的区域可以分为4块:图标、标题、常用按钮区域、action overflow(放不下的按钮都放在这里)
action overflow按钮会弹出二级按钮,通常放不下的按钮都放在这里。如下图:
2.2添加工具栏按钮的步骤:
step1:在XML文件中定义工具栏按钮
所有的工具栏按钮都可以XML menu resource中定义,还可以指定按钮是在常用按钮区域,还是在overflow中。
在res/menu/目录下新建一个XML文件main_activity_actions.xml。为每一个你要指定的按钮添加一个&item&条目。
&menu xmlns:android=&/apk/res/android& &
&!-- Search, should appear as action button --&
&item android:id=&@+id/action_search&
android:icon=&@drawable/ic_action_search&
android:title=&@string/action_search&
android:showAsAction=&ifRoom& /&&!--如果有空间就放在常用按钮区域&
&!-- Settings, should always be in the overflow --&
&item android:id=&@+id/action_settings&
android:title=&@string/action_settings&
android:showAsAction=&never& /&&!--放在overflow中&
所有按钮的图片都用id指定。可以去官网下载官方提供的工具栏图标。我们在xml文件中,将search按钮放在了常用工具栏区域(如果有空间的话)。将setting按钮放在overflow中(官方强建议将setting按钮放在overflow中)。如果你没为&item&指定showAsAction属性,那么默认放在overflow中。
step2:将工具栏按钮添加到工具栏
经过step1,我们只是定义了工具栏按钮,它们和工具栏还没什么关系。所以在工具栏上也显示不了。现在我们把它们添加到工具栏上。添加是在activity类的onCreateOptionsMenu中进行的。
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu items for use in the action bar
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_activity_actions, menu);
return super.onCreateOptionsMenu(menu);
step3:响应工具栏按钮事件
通过step1和step2,我们只是让按钮在工具栏上显示了。而没有指定用户点击按钮后应该发生什么。当用户点击工具栏按钮后,系统会调用你的activity的onOptionsItemSelected()回调方法。我们可以在这个回调方法中用getItemId()方法来获得被点击的按钮的ID,然根据ID来响应按钮事件。
public boolean onOptionsItemSelected(MenuItem item) {
// Handle presses on the action bar items
switch (item.getItemId()) {
case R.id.action_search:
openSearch();
case R.id.action_settings:
openSettings();
return super.onOptionsItemSelected(item);
如果你是在为app的“主activity”添加工具栏,经过上面step1~step3,任务也就完成了。如果是在为“二级activity”添加工具栏的话还得step4。
step4:为“二级activity”添加Up 按钮
不是所有的activity都是顶层activity,我们得为“低级”的activity提供导航到“父activity”的按钮,就是上图中的Up按钮。Up按钮是直接在图标上实现的。同时是图标,也是Up按钮。
指定一个activity有Up按钮,只需要androidmanifest.xml文件中指定。
&application ... &
&!-- The main/home activity (it has no parent activity) --&
android:name=&com.example.myfirstapp.MainActivity& ...&
&/activity&
&!-- A child of the main activity --&
android:name=&com.example.myfirstapp.DisplayMessageActivity&
android:label=&@string/title_activity_display_message&
android:parentActivityName=&com.example.myfirstapp.MainActivity& &
&!-- Parent activity meta-data to support 4.0 and lower --&
&meta-data
android:name=&android.support.PARENT_ACTIVITY&
android:value=&com.example.myfirstapp.MainActivity& /&
&/activity&
&/application&
然后在activity的onCreate方法中将工具栏设置为可以Up导航,就大工告成了。(注意是在“低级”的activity类的onCreate方法中)
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_displaymessage);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
// If your minSdkVersion is 11 or higher, instead use:
// getActionBar().setDisplayHomeAsUpEnabled(true);
现在当在“低级”activity中点击工具栏图标时,就会导航到“父activity”。
因为我们在
androidmanifest.xml中指定,系统已经知道当前activity的“父activity”是谁了,所以我们不必自己处理Up按钮事件。当收到Up按钮的点击事件,系统会自动导航到“父activity”。
3. 定制你的工具栏外观
工具栏提供了一种熟悉和可预测的方式来为用户提供操作或导航。但是这并不意味着你的工具栏必须得和其他app的工具栏长的一模一样。如果你想让你的工具栏更有个性,使用样式和主题资源很轻松就能做到。
Android包含了一些内置的Activity主题比如“dark”或“light”工具栏样式。你可以扩展这些主题来定制你的工具栏。
3.1 使用内置的主题
Android包含两个最基本的主题可以用来指定工具栏的颜色
Theme.Holo “黑暗”主题
Theme.Holo.Light“明亮”主题
你可以为整个app或单个Activity使用这两种主题,只需要在androidmanifest文件中为&application&元素或&activity&元素添加android:theme属性即可。比如:
&application android:theme=&@android:style/Theme.Holo.Light& ... /&
而且另一种内置的主题Theme.Holo.Light.DarkActionBar
可以让你的工具栏变成黑色,而activity其余的部分使用light color。
3.2 自定义背景颜色
要改变工具栏的背景颜色,你得
1.为你的activity创建一个自定义的主题。(在res/values/目录下创建一个values resource文件)
2.重写这个主题的actionBarStyle属性。让
actionBarStyle
属性指向另一个自定义的样式。
3.将2中指向的自定义样式的background属性设置为你想要的背景图片或颜色。
就像下面这样:
res/values/themes.xml
&?xml version=&1.0& encoding=&utf-8&?&
&resources&
&style name=&CustomActionBarTheme&
parent=&@android:style/Theme.Holo.Light.DarkActionBar&&
&item name=&android:actionBarStyle&&@style/MyActionBar&/item&
&style name=&MyActionBar&
parent=&@android:style/Widget.Holo.Light.ActionBar.Solid.Inverse&&
&item name=&android:background&&@drawable/bg&/item&
&/resources&
效果为什么是这个鬼样子
(请忽略我用的图片)
如果你使用的是navigation tabs或split action bar,你同样可以通过backgroundStacked和backgroundSplit属性来改变背景。这个小弟还没用过,所以就不详细介绍了。
3.3 自定义文本颜色
To modify the color of text in the action bar, you need to override separate properties for each text element:
Action bar title: Create a custom style that specifies the&
&property and specify that style for the
&property in your custom&
&The custom style applied to&
&should use&
&as the parent style.
Action bar tabs: Override&
&in your activity theme.
Action buttons: Override&
&in your activity theme.
要改变工具栏上的文本颜色。你得根据不同的文本元素进行相应属性设置。比如工具栏标题文本、选项(tabs)卡文本、按钮上的文本。
3.3.1 自定义工具栏标题文本颜色
改变工具栏标题文本的颜色有点小复杂:
1.你先为这个工具栏创建一个自定义主题,并重新主题的actionBarStyle属性。
2.让主题的actionBarStyle属性指向另一个自定义工具栏样式。
3.让这个自定义工具栏样式的titleTextStyle属性指向另一自定义工具栏文本样式。
4.而且这个工具栏文本样式必须扩展自TextAppearance.Holo.Widget.ActionBar.Title。将它的textColor设为你想要的颜色。
3.3.2 自定义选项卡和按钮的文本颜色
改变选项卡和按钮上的文本颜色就简单一些,只需要3步:
1.为工具栏创建一个自定义主题,并重写主题的actionBarTabTextStyle属性(选项卡)或者actionMenuTextColor属性(按钮)。
actionBarTabTextStyle属性(选项卡)或者actionMenuTextColor属性(按钮)指向另一个自定义样式。
3.在自定义样式中设置textColor属性。
下面是例子:
res/values/themes.xml
&?xml version=&1.0& encoding=&utf-8&?&
&resources&
&!-- the theme applied to the application or activity --&
&style name=&CustomActionBarTheme&
parent=&@style/Theme.Holo&&
&item name=&android:actionBarStyle&&@style/MyActionBar&/item&
&item name=&android:actionBarTabTextStyle&&@style/MyActionBarTabText&/item&
&item name=&android:actionMenuTextColor&&@color/actionbar_text&/item&
&!-- ActionBar styles --&
&style name=&MyActionBar&
parent=&@style/Widget.Holo.ActionBar&&
&item name=&android:titleTextStyle&&@style/MyActionBarTitleText&/item&
&!-- ActionBar title text --&
&style name=&MyActionBarTitleText&
parent=&@style/TextAppearance.Holo.Widget.ActionBar.Title&&
&item name=&android:textColor&&@color/actionbar_text&/item&
&!-- ActionBar tabs text styles --&
&style name=&MyActionBarTabText&
parent=&@style/Widget.Holo.ActionBar.TabText&&
&item name=&android:textColor&&@color/actionbar_text&/item&
&/resources&
注意主题或样式都扩展自哪个内置主题或样式
3.3.3 自定义Tab Indicator
由于还没用过Tab,就不介绍了。
4. 工具栏重叠模式
效果大概如下图,以后待续。。。
chaoc写的样式和主题
官方文档:Action Bar guide
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致&nbsp&#8250&nbsp
Context-Menu.Android
运行效果:
使用说明:
创建含有文字与图标的MenuObject对象:ArrayList&MenuObject&&menuObjects&=&new&ArrayList&&();
&&&&&&&&menuObjects.add(new&MenuObject(R.drawable.icn_close));
&&&&&&&&menuObjects.add(new&MenuObject(R.drawable.icn_1,&&Send&message&));
&&&&&&&&menuObjects.add(new&MenuObject(R.drawable.icn_2,&&Like&profile&));
&&&&&&&&menuObjects.add(new&MenuObject(R.drawable.icn_3,&&Add&to&friends&));
&&&&&&&&menuObjects.add(new&MenuObject(R.drawable.icn_4,&&Add&to&favorites&));
&&&&&&&&menuObjects.add(new&MenuObject(R.drawable.icn_5,&&Block&user&));创建ContextMenuDialogFragment的实例&mMenuDialogFragment&=&ContextMenuDialogFragment.newInstance((int)&getResources().getDimension(R.dimen.tool_bar_height),&menuObjects&);设置打开ContextMenuDialogFragment的菜单按钮:@Override
&&&&public&boolean&onCreateOptionsMenu(final&Menu&menu)&{
&&&&&&&&MenuInflater&inflater&=&getMenuInflater();
&&&&&&&&inflater.inflate(R.menu.menu_main,&menu);
&&&&&&&&return&
&&&&@Override
&&&&public&boolean&onOptionsItemSelected(MenuItem&item)&{
&&&&&&&&switch&(item.getItemId())&{
&&&&&&&&&&&&case&R.id.context_menu:
&&&&&&&&&&&&&&&&mMenuDialogFragment.show(fragmentManager,&&ContextMenuDialogFragment&);
&&&&&&&&&&&&&&&&
&&&&&&&&return&super.onOptionsItemSelected(item);
&&&&}实现ContextMenuDialogFragment.ItemClickListener接口的onItemClick方法public&class&MainActivity&extends&ActionBarActivity&implements&ContextMenuDialogFragment.ItemClickListener
&&&&public&void&onItemClick(View&clickedView,&int&position)&{
&&&&&//Do&something&here
}自定义为了达到最佳效果menu item的大小最好和actionbar的高度一致。ContextMenuDialogFragment的newInstance可以接收如下参数animationDelay:在打开与关闭ContextMenuDialogFragment之前的延迟时间。animationDuration:每一个动画播放的持续时间。大多数android程序的右上角都会设置一个菜单按钮比如微信的界面右上角的加号。
这个需要在layout同级目录下新建文件夹命名为menu,再右击新建的menu新建xml文件:
xml文件代码:
&menu xmlns:android="/apk/res/android"
xmlns:app="/apk/res-auto"&
android:id="@+id/id_action_add"
app:showAsAction="always"
android:title="add"
android:icon="@mipmap/ic_launcher"
android:orderInCategory="1"
android:id="@+id/id_action_delete"
app:showAsAction="always"
android:title="jian"
android:icon="@mipmap/ic_launcher"
android:orderInCategory="1"
上面的两个item代表代表的是你菜单栏上面有几个按钮。android:icon中可以自定义菜单项的图片
接着是MainActivity种要重写一下代码:
public boolean onCreateOptionsMenu(Menu menu)
//新建的xml文件
getMenuInflater().inflate(R.menu.main, menu);
return super.onCreateOptionsMenu(menu);
public boolean onOptionsItemSelected(MenuItem item)
//根据不同的id点击不同按钮控制activity需要做的事件
switch (item.getItemId())
case R.id. id_action_add:
case R.id. id_action_delete:
&备忘。。。。。
阅读(...) 评论()55579人阅读
Android学习(17)
一、 使用xml定义Menu
菜单资源文件必须放在res/menu目录中。菜单资源文件必须使用&menu&标签作为根节点。除了&menu&标签外,还有另外两个标签用于设置菜单项和分组,这两个标签是&item&和&group&。
&menu&标签没有任何属性,但可以嵌套在&item&标签中,表示子菜单的形式。不过&item&标签中不能再嵌入&item&标签。
1.&item&标签的属性含义如下:
Id:表示菜单项的资源ID
menuCategory:同种菜单项的种类。该属性可取4个值:container、system、secondary和alternative。通过menuCategroy属性可以控制菜单项的位置。例如将属性设为system,表示该菜单项是系统菜单,应放在其他种类菜单项的后面。
orderInCategor:同种类菜单的排列顺序。该属性需要设置一个整数值。例如menuCategory属性值都为system的3个菜单项(item1、item2和item3)。将这3个菜单项的orderInCategory属性值设为3、2、1,那么item3会显示在最前面,而item1会显示在最后面。
title:菜单项标题(菜单项显示的文本)
titleCondensed:菜单项的短标题。当菜单项标题太长时会显示该属性值
icon:菜单项图标资源ID
alphabeticShortcut:菜单项的字母快捷键
numericShortcut:菜单项的数字快捷键
checkable:表示菜单项是否带复选框。该属性可设计为true或false
checked:如果菜单项带复选框(checkable属性为true),该属性表示复选框默认状态是否被选中。可设置的值为true或false
visible:菜单项默认状态是否可视
enable:菜单项默认状态是否被激活
2.&group&标签的属性含义如下:
id:表示菜单组的ID
menuCategory:与&item&标签的同名属性含义相同。只是作用域为菜单组
orderInCategory:与&item&标签的同名属性含义相同。只是作用域为菜单组
checkableBehavior:设置该组所有菜单项上显示的选择组件(CheckBox或Radio Button)。如果将该属性值设为all,显示CheckBox组件;如果设为single,显示Radio Button组件;如果设为none,显示正常的菜单项(不显示任何选择组件)。要注意的是,Android SDK官方文档在解释该属性时有一个笔误,原文是:
Whether the items are checkable. Valid values: none, all(exclusive/radiobuttons), single(non-exclusive/checkboxes).
相反了,正确应该是
all(non-exclusive/checkboxes),single(exclusive/radiobuttons).
visible:表示当前组中所有菜单项是否显示。该属性可设置的值是true或false
enable:表示当前组中所有菜单项是否被激活。该属性可设置的值是true或false
3.具体使用
在代码中使用
public boolenonCreateOptionsMenu(Menu menu){
MenuInflatemenuInflate = getMenuInflate();
menuInflate.inflate(R.menu.option_menu,menu);
二、使用代码定义Menu
public&boolean&onCreateOptionsMenu(Menu&menu){&&
//&方法一,用代码构建 &&
&menu.add(Menu.NONE,&Menu.NONE,&1,&&菜单1&);&&
&menu.add(Menu.NONE,&Menu.NONE,&2,&&菜单2&);&&
&menu.add(Menu.NONE,&Menu.NONE,&3,&&菜单3&);&&
&menu.add(Menu.NONE,&Menu.NONE,&4,&&菜单4&);&&
menu.add(Menu.NONE,&Menu.NONE,&5,&&菜单5&);&&
menu.add(Menu.NONE,&Menu.NONE,&6,&&菜单6&);&&
三、菜单响应
重写onOptionsItemSelected(MenuItem item)这个方法就可以做响应的操作了。
res/menu下的activity_main.xml文件
&menu xmlns:android=&/apk/res/android& &
android:id=&@+id/menu_settings&
android:orderInCategory=&1&
android:icon=&@drawable/home&
android:title=&@string/menu_settings&/&
android:id=&@+id/menu_about&
android:orderInCategory=&2&
android:icon=&@drawable/mine&
android:title=&@string/menu_about&/&
android:id=&@+id/menu_quit&
android:orderInCategory=&3&
android:icon=&@drawable/more&
android:title=&@string/menu_quit&/&
MainActivity.java文件
package com.example.
import android.os.B
import android.app.A
import android.view.M
import android.view.MenuI
import android.widget.T
public class MainActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
public boolean onCreateOptionsMenu(Menu menu) {
// I this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
switch(item.getItemId()){
case R.id.menu_about:
Toast.makeText(MainActivity.this, &&+&关于&, Toast.LENGTH_SHORT).show();
case R.id.menu_settings:
Toast.makeText(MainActivity.this, &&+&设置&, Toast.LENGTH_SHORT).show();
case R.id.menu_quit:
Toast.makeText(MainActivity.this, &&+&退出&, Toast.LENGTH_SHORT).show();
Toast.makeText(MainActivity.this, &&+item.getItemId(), Toast.LENGTH_SHORT).show();
return super.onOptionsItemSelected(item);
运行结果:
附:自定义菜单的背景参见:
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:302419次
积分:2517
积分:2517
排名:第11338名
原创:49篇
转载:57篇
评论:49条
(5)(4)(8)(7)(2)(1)(3)(2)(1)(1)(1)(2)(14)(5)(3)(17)(5)(11)(7)(5)(6)

我要回帖

更多关于 android studio menu 的文章

 

随机推荐