android 通用菜单栏实现(一)

安卓从零开发之购物商城(一)--底部菜单栏的的实现(FragmentTabHost) 前言:最近计划学习一个商城项目进行开发练手,所以准备写写记录一下,加深一下理解。(一)商城的效果界面大概与主流的手机购物app类似,万地高楼平地起,所以第一步先进行主界面的搭建,这边文章先实现底部菜单栏。这篇文章最后的效果图应该是这样: 在这里这个功能主要是用FragmentTabHost和Selector选择器来实现; 有如下几个步骤: FragmentTabHost初始化必须调用s 阅读详情

一、前言介绍

        直奔主题啦,很多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:如果各位有更好的实现方式,可以给我留言,在此先感谢各位。




Unity Android平台下插件/SDK开发通用流程 本文主要面向对Android开发不甚了解的Unity开发者,介绍了基于最新的Android Studio的标准Android开发环境与项目结构的配置流程,在此基础上,开发者可以快速的进行SDK的接入与插件的开发。 阅读详情

相关推荐

Android侧边菜单栏实现

在上述布局文件中,我们使用了DrawerLayout作为根布局,并在其中嵌套了一个线性布局用于显示应用的主界面。在res目录下的layout文件夹中,新建一个名为“activity_main.xml”的布局文件,用于显示应用的主界面。接下来,在res目录下的layout文件夹中,新建一个名为“navigation_header.xml”的布局文件,用于设置侧边菜单栏的头部布局。接下来,在MainActivity.java文件中,我们需要编写相应的代码以实现菜单栏的交互功能。Android侧边菜单栏实现。

DevGOOD的博客 1011

DrawerLayout侧滑菜单

安卓的DrawerLayout是一种布局容器,它允许用户通过从屏幕边缘水平或垂直滑动打开侧滑菜单。DrawerLayout是一种非常有用的布局容器,它使用户可以轻松地访问应用程序中的导航和设置。要使用DrawerLayout,我们需要创建一个包括主视图和侧滑菜单视图的XML布局,并在代码中操作DrawerLayout对象。最后,我们还需要确保用户可以使用手势或按钮打开侧拉菜单。

A125679880的博客 1665

Android 侧边菜单栏实现全攻略

本文还有配套的精品资源,点击获取 简介:在Android开发中,侧边菜单是常用的导航设计模式。文章将详细介绍侧边菜单的设计原理和实现方法,包括使用SlidingMenu库和NavigationView组件的步骤、注意事项和最佳实践。读者将通过这些内容,学习如何创建一个响应迅速、用户友好的侧边菜单,以增强应用的导航体验。 1. Android 侧边菜单概念及重要性 ...

weixin_42573757的博客 3592

Android左边菜单栏导航

项目中需要使用到屏幕的左边是导航菜单栏,然后点击左边的,右边的内容发生变化。苦恼了很久最终实现了效果。。 解决思路是: 1.使用ListView+Fragment来布局 2.当ListView中的Item被选中的时候,动态切换Fragment中的内容。 3.优化思路能不能使用 RecycleView+ ViewPager来实现。 最终的效果和下图类似!

IT小白 1万+

Android自定义View仿微信菜单栏入门教程

自定义View是Android开发中的高级话题,它允许开发者超越标准组件,创建完全符合自己需求的界面元素。本章将为你揭开自定义View的神秘面纱,介绍它的基础知识和如何开始编写第一个自定义View。自定义View是Android系统中View类的一个子类。它扩展了View的基本功能,允许开发者控制视图的绘制过程,并添加复杂的交互。通过继承View类并重写特定的绘制方法,你可以创建具备特定行为和样式的控件。使用自定义View,你可以:优化界面显示,提高用户体验。

weixin_34392511的博客 1031

元数据及数据仓库相关概念

文章目录元数据(metadata)的概念Data about Data定义技术元数据业务元数据总结数据仓库ODS简单的理解为 Operational Data Store, 运营数据仓储 数据整合层(也叫做数据缓冲层)EDW简单理解为 Enterprise Data Warehouse, 企业数据仓库ODS与EDW之间的差异使用角色数据来源数据获取性能和及时性数据架构数据共享能力数据系统提供应用数...

frone的专栏 3137

android左侧菜单栏实现

首先上图

快乐悍马2013的专栏 6101

TSP、MTSP问题遗传算法详细解读及python实现

写在前面 遗传算法是一种求解NPC问题的启发式算法,属于仿生进化算法族的一员。仿生进化算法是受生物行为启发而发明的智能优化算法,往往是人们发现某种生物的个体虽然行为较为简单,但生物集群通过某种原理却能表现出智能行为。于是不同的人研究不同的生物行为原理,受到启发而发明出新的仿生进化算法。比如免疫优化算法,蚁群算法,模拟退火算法等,这些算法以后也会简单介绍。 本文的主题是遗传算法,该算法也是受到生物行为启发。物竞天择,适者生存,优胜劣汰,是该优化算法的核心思想。笔者在业务中需要用到遗传算法求解TSP问题,但是网

weixin_47675950的博客 9306

ANDROID的底部导航条的制作(非滑动)

原文链接:http://www.jb51.net/article/32969.htm 底部菜单栏很重要,我看了一下很多应用软件都是用了底部菜单栏做。我这里使用了tabhost做了一种通用的(就是可以像微信那样显示未读消息数量的,虽然之前也做过但是layout下的xml写的太臃肿,这里去掉了很多不必要的层,个人看起来还是不错的,所以贴出来方便以后使用)。  先看一下做出来之后的效果:

1万+

workbench拓扑优化教程_拓扑优化实例-轮毂的优化

拓扑优化实例-轮毂的优化ANSYS Workbench的新版本集成了topology optimization模块,为用户的拓扑优化提供的很好的应用。通过拓扑优化topology optimization模块的使用可以对拓扑有较好的理解,该模块拓扑优化可以简单概括为一句话:如何在合适的位置去除确定的材料使用量,而相应的刚度变化影响最小。本例以汽车轮毂为例,来确定轮毂的辐条形状。1.建立模型DM中可...

weixin_39581739的博客 3043

对族实例进行任意的矩阵变换,需要什么样的族?

问:一个小问题,想向您请教一下。 能不能实现一个这样的操作:创建了一个常规模型的FamilyInstance,然后知道旋转和平移的矩阵,能否根据变换矩阵更新FamilyInstance的位置,绕任意轴旋转任意角度。 请问什么样的实体才能在revit项目文件中任意旋转?貌似一般的实例只能在XY平面内旋转,并且LocationPoint中只有一个Rotation参数。答:您好,因为Revit里面的构件

我爱Revit —— BIM应用及BIM应用软件解决方案专栏 3628

android 菜单栏原理,android底部菜单栏实现原理与代码

android底部菜单栏实现原理与代码,由于上个项目已完成,这周正好闲着没事,所以就整理了下以前的项目,想把一些通用的部分封装起来,这样以后遇到相似的项目就不用重复发明轮子了,也节省了开发效率。今天爱站小编把demo贴出来,一是方便以后自己查询,二是希望同时也能帮到大家。底部菜单栏很重要,我看了一下很多应用软件都是用了底部菜单栏做。我这里使用了tabhost做了一种通用的(就是可以像微信那样显示未...

weixin_39849239的博客 325

从入门到精通:dirmap 高级 Web 目录扫描实战指南

本文提供了一份从环境搭建到高级配置的dirmap Web目录扫描实战指南。详细解析了工具安装、核心配置文件dirmap.conf的深度调优,包括递归扫描、四种扫描模式(字典、爆破、爬虫、Fuzz)的实战应用,并演示了分阶段资产发现的完整工作流程,帮助安全人员高效发现隐藏目录与敏感文件。

rnn9storyteller的博客 481

android底部菜单栏实现原理与代码

转自:http://www.jb51.net/article/32969.htm 最近学习安卓,很好奇类似微信这样的菜单栏怎么做的,结果就百度到了这篇文章,写的很详细,收了~ 贴上文章的内容~ 底部菜单栏很重要,我看了一下很多应用软件都是用了底部菜单栏做。我这里使用了tabhost做了一种通用的(就是可以像微信那样显示未读消息数量的,虽然之前也做过但是layout下的xml写

u011023096的专栏 650

保姆级教程:用CameraX API快速搞定Android多摄像头切换与预览(附避坑指南)

本文提供了一份详细的CameraX API教程,帮助开发者快速实现Android多摄像头切换与预览功能。通过简化API设计和生命周期感知能力,CameraX大幅降低了开发复杂度,同时解决了多摄像头兼容性、预览优化等常见问题。文章包含完整代码示例和实战避坑指南,特别适合需要高效集成相机功能的Android开发者。

weixin_42699679的博客 166

【Unity3D框架】GameFramework框架完全教程《全网最全》-专栏文章目录

最近准备学习框架,了解到GameFramework框架是国产Unity3D框架,准备学习一下,但是奈何全网关于这个框架的教程实在太少。为了让自己学习方便一些,也为了让后来者乘凉。将框架以自己的理解整理目录,并且补全教程。觉得教程有帮助别忘了一键三连哦。

优快云博客专家,Unity3D高级软件工程师,《Unity 3D从入门到实战》作者。 2万+

android底部菜单栏demo

上一个项目已经做完了,这周基本上没事,所以整理了下以前的项目,想把一些通用的部分封装起来,这样以后遇到相似的项目就不用重复发明轮子了,也节省了开发效率。今天把demo贴出来一是方便以后自己查询,二是希望同时也能帮到大家。           底部菜单栏很重要,我看了一下很多应用软件都是用了底部菜单栏做。我这里使用了tabhost做了一种通用的(就是可以像微信那样显示未读消息数量的,虽然之前也做过但

wangkuifeng0118的专栏 4万+

量化交易 米筐 案例:市值因子选股策略

案例:市值因子的选股策略 1.结果 获得超额收益 年化 49% 2. 从股票中选择市值小的股票 选定财务数据筛选 进行每日调仓(多因子选股调仓 周期频率会小一些) 3. 代码 估值有关指标 # 在沪深300股票中,选出市值比较小的10只股票 # 在这个方法中编写任何的初始化逻辑。context对象将会在你的算法策略的任何方法之间做传递。 def init(context): # 沪深300组合 stocks = index_components('000300.XSHG') # 沪深3

廷益_飞鸟的博客 2313

Android底部菜单栏

转载于:http://blog.youkuaiyun.com/wangkuifeng0118/article/details/7745109            底部菜单栏很重要,很多应用软件都是用了底部菜单栏做。这里使用了tabhost做了一种通用的(就是可以像微信那样显示未读消息数量的,虽然之前也做过但是layout下的xml写的太臃肿,这里去掉了很多不必要的层,个人看起来还是不错的,所以贴出

yizhi鬼的专栏 872

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

安卓微信 返回显示未读条数_Android仿微信底部菜单栏功能显示未读消息数量

底部菜单栏很重要,我看了一下很多应用软件都是用了底部菜单栏,这里使用了tabhost做了一种通用的(就是可以像微信那样显示未读消息数量的,虽然之前也做过但是layout下的xml写的太臃肿,这里去掉了很多不必要的层,个人看起来还是不错的,所以贴出来方便以后使用)。先看一下做出来之后的效果:以后使用的时候就可以换成自己项目的图片和字体了,主框架不用变哈哈,首先是要布局layout下xml文件 mai...

weixin_42122838的博客 816

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

TopMenuBar顶部通用菜单栏

TopMenuBar顶部通用菜单栏 TopMenuBar顶部通用菜单栏 Android 自定义组合控件实例,顶部通用菜单栏使用kotlin编写,你可以java代码调用也可以使用kotlin调用,自定义化程度高,控件整体分为三部分,左边按钮,中间按钮,右边按钮,分别都可以设置只显示文字还是图片,文字的颜色,字体大小,字体加粗,设置图片,图片大小,按钮距离左右间距,设置控件整体背景颜色和控件高度 图为xml直接引用TopMenuBar控件的默认效果 MZBannerView 有以下功能 在xml中直接引用属性

我不是乘树猿 609

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

android tabhost底部菜单栏实现原理与代码

底部菜单栏很重要,我看了一下很多应用软件都是用了底部菜单栏做,我这里使用了tabhost做了一种通用的(就是可以像微信那样显示未读消息数量的,虽然之前也做过但是layout下的xml写的太臃肿,这里去掉了很多不必要的层,个人看起来还是不错的,所以贴出来方便以后使用 上一个项目已经做完了,这周基本上没事,所以整理了下以前的项目,想把一些通用的部分封装起来,这样以

Genge 1538

android底部菜单栏demo .

上一个项目已经做完了,这周基本上没事,所以整理了下以前的项目,想把一些通用的部分封装起来,这样以后遇到相似的项目就不用重复发明轮子了,也节省了开发效率。今天把demo贴出来一是方便以后自己查询,二是希望同时也能帮到大家。            底部菜单栏很重要,我看了一下很多应用软件都是用了底部菜单栏做。我这里使用了tabhost做了一种通用的(就是可以像微信那样显示未读消息数量的,虽然之前也做

mypanlong的专栏 542

android底部菜单栏demo(未读消息提示)

上一个项目已经做完了,这周基本上没事,所以整理了下以前的项目,想把一些通用的部分封装起来,这样以后遇到相似的项目就不用重复发明轮子了,也节省了开发效率。今天把demo贴出来一是方便以后自己查询,二是希望同时也能帮到大家。            底部菜单栏很重要,我看了一下很多应用软件都是用了底部菜单栏做。我这里使用了tabhost做了一种通用的(就是可以像微信那样显示未读消息数量的,虽然之前也做

rongwenbin的专栏 1713

手机存储android文件怎么打开,安卓手机如何打开.jio文件?

01安卓手机无法打开.jio文件,需要在电脑上安装久其通用数据管理平台软件打开。进入软件首页,点击菜单栏“装入”按钮,弹出“数据装入向然后导”,单击文件夹图标,在弹出“打开”窗口中选择装入数据的路径,单击“打开”按钮,回到“数据装入向导”,单击下一步,选择“单位数据”,选择好装入项目和“装入目标位置”后,单击下一步,单击开始,然后“完成”即可。jio是会计决算报表软件专用软件的格式,是由软件生成的...

weixin_28851659的博客 3585
上一篇: android Textview 使用之二:走马灯效果
刘启刚
博客等级 码龄18年 11粉丝 12原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值