android菜单样式
‘壹’ android怎么创建菜单
菜单是用户界面中最常见的元素之一,使用非常频繁,在Android中,菜单被分为如下三种,选项菜单(OptionsMenu)、上下文菜单(ContextMenu)和子菜单(SubMenu),以下说的是创建OptionsMenu
一、概述
public boolean onCreateOptionsMenu(Menu menu):使用此方法调用OptionsMenu。
public boolean onOptionsItemSelected(MenuItem item):选中菜单项后发生的动作。
public void onOptionsMenuClosed(Menu menu):菜单关闭后发生的动作。
public boolean onPrepareOptionsMenu(Menu menu):选项菜单显示之前onPrepareOptionsMenu方法会被调用,你可以用此方法来根据打当时的情况调整菜单。
public boolean onMenuOpened(int featureId, Menu menu):单打开后发生的动作。
二、默认样式
默认样式是在屏幕底部弹出一个菜单,这个菜单我们就叫他选项菜单OptionsMenu,一般情况下,选项菜单最多显示2排每排3个菜单项,这些菜单项有文字有图标,也被称作Icon Menus,如果多于6项,从第六项开始会被隐藏,在第六项会出现一个More里,点击More才出现第六项以及以后的菜单项,这些菜单项也被称作Expanded Menus。下面介绍。
1.main.xml
<?xmlversion="1.0"encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextViewandroid:layout_width="wrap_content"
android:layout_height="wrap_content"android:text="请点击Menu键显示选项菜单"
android:id="@+id/TextView02"/>
</LinearLayout>
2。重载onCreateOptionsMenu(Menu menu)方法
重载onCreateOptionsMenu(Menu menu)方法,并在此方法中添加菜单项,最后返回true,如果false,菜单则不会显示。
java">(Menumenu)
@Override
(Menumenu){
/*
*
*add()方法的四个参数,依次是:
*
*1、组别,如果不分组的话就写Menu.NONE,
*
*2、Id,这个很重要,Android根据这个Id来确定不同的菜单
*
*3、顺序,那个菜单现在在前面由这个参数的大小决定
*
*4、文本,菜单的显示文本
*/
menu.add(Menu.NONE,Menu.FIRST+1,5,"删除").setIcon(
android.R.drawable.ic_menu_delete);
//setIcon()方法为菜单设置图标,这里使用的是系统自带的图标,同学们留意一下,以
//android.R开头的资源是系统提供的,我们自己提供的资源是以R开头的
menu.add(Menu.NONE,Menu.FIRST+2,2,"保存").setIcon(
android.R.drawable.ic_menu_edit);
menu.add(Menu.NONE,Menu.FIRST+3,6,"帮助").setIcon(
android.R.drawable.ic_menu_help);
menu.add(Menu.NONE,Menu.FIRST+4,1,"添加").setIcon(
android.R.drawable.ic_menu_add);
menu.add(Menu.NONE,Menu.FIRST+5,4,"详细").setIcon(
android.R.drawable.ic_menu_info_details);
menu.add(Menu.NONE,Menu.FIRST+6,3,"发送").setIcon(
android.R.drawable.ic_menu_send);
returntrue;
}
3。为菜单项注册事件
使用onOptionsItemSelected(MenuItem item)方法为菜单项注册事件
(MenuItemitem)
@Override
(MenuItemitem){
switch(item.getItemId()){
caseMenu.FIRST+1:
Toast.makeText(this,"删除菜单被点击了",Toast.LENGTH_LONG).show();
break;
caseMenu.FIRST+2:
Toast.makeText(this,"保存菜单被点击了",Toast.LENGTH_LONG).show();
break;
caseMenu.FIRST+3:
Toast.makeText(this,"帮助菜单被点击了",Toast.LENGTH_LONG).show();
break;
caseMenu.FIRST+4:
Toast.makeText(this,"添加菜单被点击了",Toast.LENGTH_LONG).show();
break;
caseMenu.FIRST+5:
Toast.makeText(this,"详细菜单被点击了",Toast.LENGTH_LONG).show();
break;
caseMenu.FIRST+6:
Toast.makeText(this,"发送菜单被点击了",Toast.LENGTH_LONG).show();
break;
}
returnfalse;
}
4.完整代码
packagecom.android.menu;
importandroid.app.Activity;
importandroid.os.Bundle;
importandroid.view.Menu;
importandroid.view.MenuItem;
importandroid.widget.Toast;
{
/**.*/
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
@Override
(Menumenu){
/*
*
*add()方法的四个参数,依次是:
*
*1、组别,如果不分组的话就写Menu.NONE,
*
*2、Id,这个很重要,Android根据这个Id来确定不同的菜单
*
*3、顺序,那个菜单现在在前面由这个参数的大小决定
*
*4、文本,菜单的显示文本
*/
menu.add(Menu.NONE,Menu.FIRST+1,5,"删除").setIcon(
android.R.drawable.ic_menu_delete);
//setIcon()方法为菜单设置图标,这里使用的是系统自带的图标,同学们留意一下,以
//android.R开头的资源是系统提供的,我们自己提供的资源是以R开头的
menu.add(Menu.NONE,Menu.FIRST+2,2,"保存").setIcon(
android.R.drawable.ic_menu_edit);
menu.add(Menu.NONE,Menu.FIRST+3,6,"帮助").setIcon(
android.R.drawable.ic_menu_help);
menu.add(Menu.NONE,Menu.FIRST+4,1,"添加").setIcon(
android.R.drawable.ic_menu_add);
menu.add(Menu.NONE,Menu.FIRST+5,4,"详细").setIcon(
android.R.drawable.ic_menu_info_details);
menu.add(Menu.NONE,Menu.FIRST+6,3,"发送").setIcon(
android.R.drawable.ic_menu_send);
returntrue;
}
@Override
(MenuItemitem){
switch(item.getItemId()){
caseMenu.FIRST+1:
Toast.makeText(this,"删除菜单被点击了",Toast.LENGTH_LONG).show();
break;
caseMenu.FIRST+2:
Toast.makeText(this,"保存菜单被点击了",Toast.LENGTH_LONG).show();
break;
caseMenu.FIRST+3:
Toast.makeText(this,"帮助菜单被点击了",Toast.LENGTH_LONG).show();
break;
caseMenu.FIRST+4:
Toast.makeText(this,"添加菜单被点击了",Toast.LENGTH_LONG).show();
break;
caseMenu.FIRST+5:
Toast.makeText(this,"详细菜单被点击了",Toast.LENGTH_LONG).show();
break;
caseMenu.FIRST+6:
Toast.makeText(this,"发送菜单被点击了",Toast.LENGTH_LONG).show();
break;
}
returnfalse;
}
@Override
publicvoidonOptionsMenuClosed(Menumenu){
Toast.makeText(this,"选项菜单关闭了",Toast.LENGTH_LONG).show();
}
@Override
(Menumenu){
Toast.makeText(this,
"选项菜单显示之前onPrepareOptionsMenu方法会被调用,你可以用此方法来根据打当时的情况调整菜单",
Toast.LENGTH_LONG).show();
//如果返回false,此方法就把用户点击menu的动作给消费了,onCreateOptionsMenu方法将不会被调用
returntrue;
}
}
5.运行效果
关于menu的更多用法,参考
http://www.cnblogs.com/salam/archive/2011/04/04/2005329.html
‘贰’ android 里怎么用adapter写下拉菜单选择
所使用的工具:电脑
开发工具:eclipse for Android , Android Studio
用adapter 写下拉菜单需要我们自己进行自定义,具体步骤如下:
1、自定义类,类成员与需要显示的字段一致;
publicclassManufacture{
privateStringname;
publicManufacture(Stringname){
super();
this.name=name;
}
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
}
2、自定义adapter并继承自BaseAdapter实现相应方法,下面是贴出的代码示例:
{
privateList<Manufacture>mList;
privateContextcontext;
//创建有参构造,参数需要传入两个1.自定义类类型的List,上下文参数
publicMnufactureAdapter(List<Manufacture>mList,Contextcontext){
super();
this.mList=mList;
this.context=context;
}
//返回长度位所定义List的长度
@Override
publicintgetCount(){
returnmList.size();
}
//返回位置为自定义list当前位置
@Override
publicObjectgetItem(intposition){
returnmList.get(position)
;
}
//返回条目的ID
@Override
publiclonggetItemId(intposition){
returnposition;
}
//这里getView需方法需要重点说明和注意:
@Override
publicViewgetView(intposition,ViewconvertView,ViewGroupparent){
//创建一个LayoutInflater并传入上下文
LayoutInflaterlinflater=LayoutInflater.from(context);
//添加自定义item布局到convertView;(item内容和样式通过自定义方式实现)
convertView=linflater.inflate(R.layout.spinner_item_layout,null);
//初始化Item中控件
TextViewtextView=(TextView)convertView.findViewById(R.id.manufacture_list);
//设置控件显示内容
textView.setText(mList.get(position).getName());
returnconvertView;
}
}
3、在activity中需要添加如下代码:
//初始化布局文件中的spinner
SpinnermSpinner=(Spinner)findViewById(R.id.spinner1);
//初始化自定义的List,并往里面添加数据
List<Manufacture>manufacture=newArrayList<Manufacture>();
接着就是添加数据,在项目中我是添加的从网络上下载的数据解析之后进行添加的,具体的添加方式根据具体需要进行添加,我把自己的贴在下面供大家参考:
for(inti=0;i<list.size();i++){
//添加数据源
manufacture.add(newManufacture(list.get(i).getName()));
}
//实例化一个之前自定义的adapter并向里面添加数据
MnufactureAdaptermadapter=newMnufactureAdapter(manufacture,ProctManageActivity.this);
参数说明:第一个参数是添加数据源后的List,第二个是当前activity的上下文。
最后一步,向spinner里面添加数据源
mSpinner.setAdapter(madapter);
‘叁’ androidUI鎺т欢Spinner涓嬫媺凿滃崟鎺т欢涓ょ崭娇鐢ㄦ柟娉
浣跨敤android鍒朵綔琛ㄥ崟涓涓嬫媺凿滃崟镓浣跨敤镄勬带浠禨pinner鍦╝ndroid涓涓烘垜浠瀹氢箟浜嗗崄鍒嗗ソ鐢ㄥソ鐪嬬殑镙峰纺锛屽悓镙风亩鍗曚娇鐢ㄦ柟娉曚篃链変袱绉嶃傚垎鍒鍙浠ユ坠宸ユ瀯寤烘暟鎹鍜屼娇鐢▁ml銮峰彇鏁版嵁锛屽綋铹跺疄闄呴”鐩涓闇瑕佽幏鍙栫绣缁沧暟鎹銆傚彟澶朣pinner鎺т欢闇瑕佸疄鐜疠nItemSelectedListener鎺ュ彛𨱒ュ畬鎴怱pinner涓嬫媺凿滃崟镄勫姛鑳姐傚叿浣扑娇鐢ㄦ柟娉曞备笅銆
涓銆佹坠宸ユ瀯寤篠pinner涓嬫媺妗嗘暟鎹
鎸夌収姝e父娴佺▼锛岄栧厛搴斿厛鎶婂瑰簲镄刅iew鏄剧ず鍑烘潵锛岄渶瑕佺敤鍒瘪extView鍜孲pinner鎺т欢鍗冲彲锛屾墍鍦‵orm Widgets鍗冲彲镓惧埌锛岀浉鍏充唬镰佸拰绀轰緥锲惧备笅銆
锲犱负涓嬫媺凿滃崟闇瑕佹暟鎹锛屾墍浠ユ垜浠鍏堢敤List灏嗘暟鎹婧愭斁杩涘幓锛屽畾涔変负getDataSource()銆备唬镰佺ず渚嫔备笅銆
链钖庤佸垱寤篠pinnerActivity锛屽湪銮峰彇UI鎺т欢涔嫔悗锛岀劧钖庡啀鍒涘缓Spinner鎺т欢阃傞厤鍣ㄥ苟瀹氢箟涓嬫媺妗嗙殑镙峰纺锛岃繖閲屾敞镒廇rrayAdapter瀹氢箟镄勬硾鍨嬫槸String褰㈠纺镄勶纴钥屼笖android宸茬粡涓烘垜浠瀹氢箟濂戒简涓嬫媺妗嗙殑镙峰纺锛屾瘆濡俛ndroid.R.layout.simple_spinner_dropdown_item锛屽洜姝ゆ垜浠鐩存帴璋幂敤鍗冲彲瀹屾垚Spinner涓嬫媺妗嗘带浠剁殑镎崭綔銆傜浉鍏充唬镰佸备笅銆
浜屻佷娇鐢╔ML鏋勫缓Spinner涓嬫媺妗嗘暟鎹
浣跨敤XML鏋勫缓Spinner涓嬫媺妗嗘暟鎹锛岀涓姝ヨ缮鏄瑕佸厛灏哣iew瑙嗗浘琛ㄧ幇鍑烘潵锛屽拰鏂规硶涓浠g爜鐩稿悓銆傜洿鎺ョ収鎼鍗冲彲銆
杩欎釜鏂规硶鐢ㄥ埌XML锛屽洜姝ゅ氨闇瑕佸埌string.xml涓瀹氢箟鏁版嵁婧愶纴绀轰緥浠g爜濡备笅锛
链钖庡氨鏄鍦ㄥ垱寤虹殑SpinnerActivity涓鐩存帴銮峰彇string.xml涓镄勬暟鎹婧愶纴杩欓噷闇瑕佹敞镒忕殑鏄蹇呴’瀹炵幇骞舵敞鍐岀洃钖鍣∣nItemSelectedListener锛屾墠鑳戒娇涔嫔墠镄勬搷浣灭敓鏁堛俿pinner.setOnItemSelectedListener(this);銆傚彟澶栵纴阃傞厤鍣ˋrrayAdapter濡傛灉鐢ㄥ埌createFromResource銮峰彇鏁版嵁婧愶纴灏卞繀椤诲畾涔堿rrayAdapter镄勬硾鍨嬩负CharSequence褰㈠纺锛屽惁鍒欐姤阌欍傚叿浣扑唬镰佸拰瀹炵幇鏁堟灉锲惧备笅銆
‘肆’ Android 菜单列表用什么做好,类似图中的效果
1)最外围的是一个Activity,顶部包含了一个View的容器,这个容器主要是装载ToggleButton来实现诸如美团里面的“美食,全城,理我最近,刷选”这一行。这一行一点就会弹出对应的下来菜单。
2)下拉菜单是如何实现的呢?,这里我们利用了PopupWindow来实现这一弹出式窗口。然后我们在弹出式窗口里面再定义我们的下来列表项,是单列还是二级菜单,都是由里面来定。
3)不同的菜单,需要一级或者需要二级,在这里根据我的需求而变动。我们在PopupWindow上面加一个自定义的LeftView,或者是MiddleView,RightView。主要是一个ToggleButton,你弹出一个窗口,你就定制一个窗口。
3)视图里面嵌入ListView,就形成了列表项。
‘伍’ android 镐庢牱鐢℉orizontalScrollView宸﹀彸寮规х殑凿滃崟
{
SlidingMenumSlidingMenu;
@Override
protectedvoidonCreate(Bundlearg0){
super.onCreate(arg0);
setContentView(R.layout.main);
DisplayMetricsdm=newDisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
mSlidingMenu=(SlidingMenu)findViewById(R.id.slidingMenu);
mSlidingMenu.setAlignScreenWidth((dm.widthPixels/5)*2);
ViewleftView=getLayoutInflater().inflate(R.layout.left_menu,null);
ViewrightView=getLayoutInflater().inflate(R.layout.right_menu,null);
ViewcenterView=getLayoutInflater().inflate(R.layout.center,null);
mSlidingMenu.setLeftView(leftView);
mSlidingMenu.setRightView(rightView);
mSlidingMenu.setCenterView(centerView);
ButtonshowLeftMenu=(Button)centerView.findViewById(R.id.center_left_btn);
showLeftMenu.setOnClickListener(this);
ButtonshowRightMenu=(Button)centerView.findViewById(R.id.center_right_btn);
showRightMenu.setOnClickListener(this);
}
@Override
publicvoidonClick(Viewv){
//TODOAuto-generatedmethodstub
switch(v.getId()){
caseR.id.center_left_btn:
mSlidingMenu.showLeftView();
break;
caseR.id.center_right_btn:
mSlidingMenu.showRightView();
break;
default:
break;
}
}
}
‘陆’ Androidstudio怎么新建菜单
首先找到菜单栏,并单击菜单栏中的“File”菜单,在弹出的子菜单中选择“New”选项
在“New”菜单的下一级子菜单中选择“New Project...”并单击它
在弹出的“Create New Project”对话框中输入以下参数:“Application name”中输入项目的名字,“Company Domain”中输入公司简称,“Project location”中则是项目具体的保存路径,完成后单击“Next”
在接下来的对话框中选择自己的项目所对应的最高版本的API版本,这里选择的是Android 5.1,其他选择默认,单击“Next”
在弹出的下一步对话框中设置项目的Activity,这里选择空白的Activity,单击“Next”
接下来就是对Activity进行设置了,这里分别是“Activity Name”Activity的名字,“Layout Name”布局的名字,“Title”标题,“Menu Resource Name”菜单布局的名字
设置完成后单击“Finish”完成按钮,Android Studio会进行加载
这是Android Studio会打开一个新的窗口,这就是我们新建的项目了
‘柒’ android 娓告垙寮濮嬭彍鍗 镐庝箞锅
1,鍦╝ndroid椤圭洰涓寰梤es鏂囦欢涓嬫柊寤簒ml锛屽脊鍑簒ml鏂板缓妗嗭纴Resource Type涓嬫媺阃夋嫨Menu锛宲roject涓岖敤阃夛纴榛樿ゆ槸链椤圭洰锛孎ile杈揿叆灏忓啓鑻辨枃钖嶅瓧镄刹ml锛屼緥濡俶enu.xml,镣笷insh
2,鍦ㄦ柊寤虹殑xml鏂囦欢閲岋纴杈揿叆浠ヤ笅鍐呭癸细
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/startGame"
android:icon="@android:drawable/ic_menu_add"
android:title="杩涘叆娓告垙"></item>
<item
android:id="@+id/exitGame"
android:icon="@android:drawable/ic_menu_add"
android:title="阃鍑烘父鎴"></item>
</menu>
姣忎竴涓<item>灏辨槸涓涓寮濮嬭彍鍗旷殑涓涓阃夐”锛宨d闅忎究杈揿叆锛岃颁綇id锛宨con鏄凿滃崟阃夐”钖嶅瓧涓婇溃镄勫浘镙囷纴鍙瑕佸彲涓嶈侊纴title灏辨槸凿滃崟阃夐”钖嶅瓧锛屼緥濡傜涓涓灏辨槸钬滆繘鍏ユ父鎴忊濋夐”锛岃佸氩皯阃夐”灏卞缓澶氩皯涓猧tem锛
3,鍦ㄤ富绋嫔簭閲岋纴灏辨槸浣犵殑鍧﹀厠澶ф垬镄刟ctivity閲岋纴澶嶅啓onCreateOptionMenu锛圡enu menu锛夋柟娉曞叿浣揿备笅锛
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
MenuInflater menuInflater = getMenuInflater();
menuInflater.inflate(R.menu.menu, menu);
return super.onCreateOptionsMenu(menu);
}
铹跺悗鍐嶅嶅啓涓鐩戝惉鎸夐挳镄勬柟娉昽nOptionsItemSelected(MenuItem item)锛涘叿浣扑唬镰佸备笅锛
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.startGame:
break;
case R.id.exitGame:
break;
default:
break;
}
return super.onOptionsItemSelected(item);
}
OK锛岃繍琛岀▼搴忓湪娓告垙閲岀偣menu灏卞嚭鐜颁袱涓阃夐”锛岃繘鍏ユ父鎴忓拰阃鍑烘父鎴忥纴
涓嶆哕闂鎴戯纴
‘捌’ android 右上角下拉菜单 怎么做 csdn
在res/menu下新建一个menu类型的xml,并在内部编写item,每一个item是一个菜单项
在activity中重写onCreateOptionsMenu方法,并执行getMenuInflater.inflate方法关联刚才的菜单文件
在activity中重写onOptionsItemSelected方法,并在方法内编写菜单点击之后的逻辑