这期内容当中小编将会给大家带来有关Android应用中怎么自定义一个菜单栏,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

创新互联公司专注于涧西网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供涧西营销型网站建设,涧西网站制作、涧西网页设计、涧西网站官网定制、成都微信小程序服务,打造涧西网络公司原创品牌,更为您提供涧西网站排名全网营销落地服务。
在android开发的过程中系统自带的菜单往往满足不了开发中的一些需求,比如说一排最多只能放置三个菜单,坐多只能放置6个,再多的话就会折叠起来,如果我们想再一排显示4个或5个菜单那么就要自己想办法处理。
这里我用布局的隐藏并加上动画来模拟菜单的效果。
要点:
1、隐藏和显示菜单,我使用了一个线性布局把菜单封装起来。
<?xml version="1.0" encoding="utf-8"?>
2、模拟菜单的效果,增加动画,布局显示的时候增加一个渐渐底部生气的效果,隐藏的时候增加一个缓缓下落的效果,显示菜单动画文件:
<?xml version="1.0" encoding="utf-8"?>
隐藏菜单动画文件:
<?xml version="1.0" encoding="utf-8"?>
动画调用:
/**
* 显示菜单栏, 重新实现的Option menu.
* */
private void showAppMenu() {
if (menuShowAnimation == null) {
menuShowAnimation = AnimationUtils
.loadAnimation(mContext, R.anim.menuhide);
}
myLayout.startAnimation(menuShowAnimation);
myLayout.setVisibility(View.VISIBLE);
}
/**
* 隐藏菜单栏, 重新实现的Option menu.
* */
private void hideAppMenu() {
myLayout.setVisibility(View.GONE);
if (menuHideAnimation == null)
menuHideAnimation =AnimationUtils
.loadAnimation(mContext, R.anim.menushow);
myLayout.startAnimation(menuHideAnimation);
}3、控制菜单的隐藏和显示,需要重写三个方法public boolean onCreateOptionsMenu(Menu menu),
public boolean dispatchKeyEvent(KeyEvent event) 和public boolean dispatchTouchEvent(MotionEvent event)
@Override
public boolean onCreateOptionsMenu(Menu menu) {
if(mCustomMenu==null)
mCustomMenu=new CustomMenu(CustomMenuActivity.this,CustomMenuActivity.this);
mCustomMenu.CreateMenu();
return false;
}
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
if(mCustomMenu!=null)
return mCustomMenu.dispatchKeyEvent(event,super.dispatchKeyEvent(event));
return super.dispatchKeyEvent(event);
}
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
if(mCustomMenu!=null)
return mCustomMenu.dispatchTouchEvent(event,super.dispatchTouchEvent(event));
return super.dispatchTouchEvent(event);
}4、实现菜单点击时候被点击菜单状态的般变化,这里我使用了selector来实现,菜单我使用ImageButton将selector赋值给ImageButton 的background即可:
一个菜单项
menu_index_selector 文件内容如下:
<?xml version="1.0" encoding="utf-8"?>
5、页面的调用使用:
<?xml version="1.0" encoding="utf-8"?>
这样的话一个模拟的自定义菜单就基本完成了,菜单控制完整代码java类:
package com.demo.utils;
import android.app.Activity;
import android.content.Context;
import android.content.res.Resources;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import com.demo.HelloWorld.R;
/**
* @author Administrator
* xsl xushilin@kingtoneinfo.com
* @version: 创建时间:2011-8-30 上午11:16:19
* 说 明:
* 修改历史:
*/
public class CustomMenu {
private LinearLayout myLayout;
private Context mContext;
private Activity mActivity;
private Animation menuShowAnimation = null;
private Animation menuHideAnimation = null;
private Resources res;
public int screen_height;
private ImageButton imgIndex,imgSet,imgNews,imgAdd,imgQuit,imgLib;
public CustomMenu(Context context,Activity activity){
mContext=context;
mActivity=activity;
res = mContext.getResources();
screen_height = res.getDisplayMetrics().heightPixels;
myLayout=(LinearLayout)activity.findViewById(R.id.lines);
imgIndex=(ImageButton)activity.findViewById(R.id.menu_btn_index);
imgSet=(ImageButton)activity.findViewById(R.id.menu_btn_set);
imgNews=(ImageButton)activity.findViewById(R.id.menu_btn_news);
imgAdd=(ImageButton)activity.findViewById(R.id.menu_btn_add);
imgQuit=(ImageButton)activity.findViewById(R.id.menu_btn_quit);
imgLib=(ImageButton)activity.findViewById(R.id.menu_btn_lib);
//返回首页
imgIndex.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
//TODO do somthing
}
});
//设置
imgSet.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
//TODO do somthing
}
});
//查询
imgNews.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
//TODO do somthing
}
});
//编辑
imgAdd.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
//TODO do somthing
}
});
//退出系统
imgQuit.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
//TODO do somthing
}
});
//素材库
imgLib.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
//TODO do somthing
}
});
}
public void CreateMenu(){
if(myLayout.getVisibility()==View.GONE)
showAppMenu();
//myLayout.setVisibility(View.VISIBLE);
else
hideAppMenu();
//myLayout.setVisibility(View.GONE);
}
/**
* 显示菜单栏, 重新实现的Option menu.
* */
private void showAppMenu() {
if (menuShowAnimation == null) {
menuShowAnimation = AnimationUtils
.loadAnimation(mContext, R.anim.menuhide);
}
myLayout.startAnimation(menuShowAnimation);
myLayout.setVisibility(View.VISIBLE);
}
/**
* 隐藏菜单栏, 重新实现的Option menu.
* */
private void hideAppMenu() {
myLayout.setVisibility(View.GONE);
if (menuHideAnimation == null)
menuHideAnimation =AnimationUtils
.loadAnimation(mContext, R.anim.menushow);
myLayout.startAnimation(menuHideAnimation);
}
public boolean dispatchTouchEvent(MotionEvent event,boolean b) {
if (myLayout.getVisibility() == View.VISIBLE) {
int y = (int) event.getRawY();
if (y < screen_height - myLayout.getHeight()) {
hideAppMenu();
return true;
}
}
return b;
}
public boolean dispatchKeyEvent(KeyEvent event,boolean b) {
int act = event.getAction();
int code = event.getKeyCode();
// app menu like option menu
if (code == KeyEvent.KEYCODE_MENU){
if (act == KeyEvent.ACTION_DOWN){
if (myLayout.getVisibility() == View.VISIBLE) {
hideAppMenu();
} else {
showAppMenu();
}
return true;
}
}else if (code == KeyEvent.KEYCODE_BACK){
if (myLayout.getVisibility() == View.VISIBLE) {
hideAppMenu();
return true;
}
}
return b;
}
}activity调用菜单完整代码:
package com.demo.ui;
import com.demo.HelloWorld.R;
import com.demo.utils.CustomMenu;
import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MotionEvent;
/**
* @author XSL
* xsl xushilin@kingtoneinfo.com
* @version: 创建时间:2011-8-30 上午11:13:14
* 说 明:
* 修改历史:
*/
public class CustomMenuActivity extends Activity {
private CustomMenu mCustomMenu=null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.custom_menu);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
if(mCustomMenu==null)
mCustomMenu=new CustomMenu(CustomMenuActivity.this,CustomMenuActivity.this);
mCustomMenu.CreateMenu();
return false;
}
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
if(mCustomMenu!=null)
return mCustomMenu.dispatchKeyEvent(event,super.dispatchKeyEvent(event));
return super.dispatchKeyEvent(event);
}
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
if(mCustomMenu!=null)
return mCustomMenu.dispatchTouchEvent(event,super.dispatchTouchEvent(event));
return super.dispatchTouchEvent(event);
}
}上述就是小编为大家分享的Android应用中怎么自定义一个菜单栏了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注创新互联行业资讯频道。
新闻名称:Android应用中怎么自定义一个菜单栏
URL网址:http://www.jxjierui.cn/article/gcspdi.html


咨询
建站咨询
