一、前言介绍
直奔主题啦,很多Android app都有菜单栏,菜单栏除了背景图片、图标的不同外,布局基本一致。大致可以分为三部分:菜单栏的左侧区域、菜单栏中间区域、菜单栏右侧区域。
为了考虑代码的重用性,本文将给大家讲解通用菜单栏的实现方式。示例中的代码,大家稍微变通,可以满足大部分软件开发需要。
二、示例截图
我的一贯习惯,有图有真相。下面先看下通用菜单栏的截图:
三、实现介绍
3.1菜单栏布局文件:title_top_view.xml
<span style="font-size:14px;"><?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#000"
>
<RelativeLayout android:id="@+id/title_bar"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/title_bg">
<!-- 左侧区域 -->
<ImageButton android:id="@+id/left_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:layout_marginLeft="5dip"
android:background="@drawable/select_back"/>
<!-- 中间区域 -->
<TextView android:id="@+id/mid_txt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:singleLine="true"
android:ellipsize="end"
android:layout_marginLeft="60dip"
android:layout_marginRight="60dip"
/>
<!-- 右侧区域 -->
<ImageButton android:id="@+id/right_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_marginRight="5dip"
android:layout_centerVertical="true"
android:background="@drawable/selector_setting"/>
</RelativeLayout>
</RelativeLayout>
</span>
3.2 MainActivity页面布局文件:activity_main.xml
<span style="font-size:14px;"><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
>
<!-- 通过该标签导入菜单栏 -->
<include
android:id="@+id/title_bar"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
layout="@layout/title_top_view"/>
<TextView
android:layout_below="@id/title_bar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
</RelativeLayout>
</span>
3.3java代码部分
提到java代码部分,先看通用菜单栏代码设计类图,如下:
类图说明:本Demo将菜单栏的左侧区域(mLeftView)、中间区域(mMidView)、右侧区域(mRightView)成员声明为protected,有违反代码封装性,各位可以下载Demo自行修改为private,并提供对外接口。本Demo主要用意方便子类访问、提供访问速度。
BaseActivity.java 代码如下:
<span style="font-size:14px;">package com.example.titledemo;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
public abstract class BaseActivity extends Activity implements OnClickListener {
protected View mTitleView;
protected ImageView mLeftView;// 左侧按钮
protected TextView mMidView;// 中间文本
protected ImageView mRightView;// 右侧按钮
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
// 设置标题栏
requestWindowFeature(Window.FEATURE_NO_TITLE);
initView(savedInstanceState);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.left_btn: {
onClickLeftBtn();
break;
}
case R.id.right_btn: {
onClickRigthBtn();
break;
}
default: {
break;
}
}
}
/**
* 初始化菜单栏
*/
protected void initTitleBar() {
mTitleView = findViewById(R.id.title_bar);
if (mTitleView != null) {
mTitleView.setVisibility(View.VISIBLE);
mLeftView = (ImageView) findViewById(R.id.left_btn);
mLeftView.setOnClickListener(this);
mMidView = (TextView) findViewById(R.id.mid_txt);
mRightView = (ImageView) findViewById(R.id.right_btn);
mRightView.setOnClickListener(this);
}
}
/**
* 设置中间文本
*/
protected void setMidTxt(String strTxt) {
if (mMidView != null) {
mMidView.setText(strTxt);
}
}
/**
* 初始化页面
* @param savedInstanceState
*/
protected abstract void initView(Bundle savedInstanceState);
/**
* 单击菜单栏左侧按钮,响应处理函数,子类可继承实现自己的处理方式
*/
protected abstract void onClickLeftBtn();
protected abstract void onClickRigthBtn();
}
</span>
MainActivity.java 代码如下:
<span style="font-size:14px;">package com.example.titledemo;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.Toast;
public class MainActivity extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
protected void initView(Bundle savedInstanceState) {
// TODO Auto-generated method stub
setContentView(R.layout.activity_main);
//设置菜单栏
initTitleBar();
//设置菜单中间文本值
setMidTxt(getResources().getString(R.string.app_name));
}
@Override
protected void onClickLeftBtn() {
// TODO Auto-generated method stub
Toast.makeText(this, "点击了菜单左侧按钮", Toast.LENGTH_SHORT).show();
}
@Override
protected void onClickRigthBtn() {
// TODO Auto-generated method stub
Toast.makeText(this, "点击了菜单右侧按钮", Toast.LENGTH_SHORT).show();
}
}
</span>
四、示例下载
以下为Demo示例代码下载路径,http://download.youkuaiyun.com/detail/improveyourself/7505935
ps:如果各位有更好的实现方式,可以给我留言,在此先感谢各位。