一、前言介绍

直奔主题啦,非常多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;// 左側button
protected TextView mMidView;// 中间文本
protected ImageView mRightView;// 右側button @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); /**
* 单击菜单条左側button。响应处理函数,子类可继承实现自己的处理方式
*/
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, "点击了菜单左側button", Toast.LENGTH_SHORT).show();
} @Override
protected void onClickRigthBtn() {
// TODO Auto-generated method stub
Toast.makeText(this, "点击了菜单右側button", Toast.LENGTH_SHORT).show();
} }
</span>

四、演示样例下载

下面为Demo演示样例代码下载路径,http://download.csdn.net/detail/improveyourself/7505935

ps:假设各位有更好的实现方式。能够给我留言,在此先感谢各位。

android 通用菜单条实现(一)的更多相关文章

  1. android 三级菜单 BaseExpandableListAdapter

    在网上搜了非常长时间.没有找到合适的Android三级菜单.所以就自己动手写了一个,主要使用了BaseExpandableList来实现,通过三个布局文件来完毕相应的菜单项,详细实现请參照下图. wa ...

  2. 15类Android通用流行框架

    15类Android通用流行框架 Android流行框架 缓存 DiskLruCache Java实现基于LRU的磁盘缓存 图片加载 Android Universal Image Loader 一个 ...

  3. Redrain 通用菜单控件使用方法和说明(附源码和demo)

    转载请说明原出处,谢谢~~:http://blog.csdn.net/zhuhongshu/article/details/42889709 大概半年前我写过博客说明怎么改造duilib的原代Menu ...

  4. Android抽屉菜单DrawerLayout的实现案例

    (1)项目布局文件 activity_main.xml <android.support.v4.widget.DrawerLayout xmlns:android="http://sc ...

  5. Android侧滑菜单代码实现

    前两天学习了hyman老师讲的Android侧滑菜单的实现,经过自己的整理分享出来给大家学习一下 现在很多APP都有菜单侧滑的功能,本篇文章主要讲解使用自定义的HorizontalScrollView ...

  6. 60.Android通用流行框架大全

    转载:https://segmentfault.com/a/1190000005073746 Android通用流行框架大全 1. 缓存 名称 描述 DiskLruCache Java实现基于LRU的 ...

  7. Android开发60条技术经验总结

    Android开发60条技术经验总结,以下是全文: 1. 全部Activity可继承自BaseActivity,便于统一风格与处理公共事件,构建对话框统一构建器的建立,万一需要整体变动,一处修改到处有 ...

  8. Android 设置进度条背景

    Android 设置进度条背景 直接上代码 <ProgressBar android:id="@+id/progressBar" android:layout_width=& ...

  9. android 自定义进度条颜色

    android 自定义进度条颜色 先看图 基于产品经理各种自定义需求,经过查阅了解,下面是自己对Android自定义进度条的学习过程!   这个没法了只能看源码了,还好下载了源码, sources\b ...

随机推荐

  1. 【知识总结】回文自动机(Palindrome_Automaton)

    参考资料:Palindromic Tree--回文树[处理一类回文串问题的强力工具](请注意,其中似乎有一些错误) 回文自动机似乎和回文树是同一个东西qwq? 回文自动机(PAM)是一种处理回文串的工 ...

  2. ACM_黯然销魂?

    黯然销魂? Time Limit: 2000/1000ms (Java/Others) Problem Description: 发神集训表现出色,决定要送他鸡翅,但是锴神决定不让他那么容易拿到,所以 ...

  3. mysql远程服务器访问数据库

    创建一个MySQL用户,并设置可以远程访问 grant usage on *.* to 'fred'@'localhost' identified by 'fred';//创建用户fred密码ferd ...

  4. .net Jquery动态显示当前时间

    <span id="Timer"></span> <script type="text/javascript"> $(fun ...

  5. Mysql中的索引()key 、primary key 、unique key 与index区别)

    CREATE TABLE pre_forum_post ( pid int(10) unsigned NOT NULL COMMENT '帖子id', fid mediumint(8) unsigne ...

  6. 关于debug.keystore文件用法以及错误处理

    在开发过程中需要频繁的为测试的同事签名apk,非常很麻烦,把默认debug.keystore文件替换成发布用(生产环境)的签名文件,不用频繁地签名apk文件了.      如果直接使用生产keysto ...

  7. canves应用

    canves用得好可以有好多效果: html:<canvas id="myCanvas" width="700" height="300&quo ...

  8. html5——拖拽

    基本情况 在HTML5的规范中,我们可以通过为元素增加draggable="true"来设置此元素是否可以进行拖拽操作,其中图片.链接默认是开启的. 拖拽元素 页面中设置了drag ...

  9. JS——scroll动画

    固定导航栏 1.计算导航栏到顶部的距离值 2.当scrollTop值大于这个距离值就添加定位,当小于距离值后解除定位 注意事项:当导航栏添加定位之后,导航栏就脱离了文档流,也就是不占位了,下面的盒子就 ...

  10. 【译】x86程序员手册20-6.3.4门描述符守卫程序入口

    6.3.4 Gate Descriptors Guard Procedure Entry Points 门描述符守卫程序入口 To provide protection for control tra ...