当前位置:  编程技术>移动开发

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

    来源: 互联网  发布时间:2014-10-12

    本文导语:  上一个项目已经做完了,这周基本上没事,所以整理了下以前的项目,想把一些通用的部分封装起来,这样以后遇到相似的项目就不用重复发明轮子了,也节省了开发效率。今天把demo贴出来一是方便以后自己查询,二是希望...

上一个项目已经做完了,这周基本上没事,所以整理了下以前的项目,想把一些通用的部分封装起来,这样以后遇到相似的项目就不用重复发明轮子了,也节省了开发效率。今天把demo贴出来一是方便以后自己查询,二是希望同时也能帮到大家。

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


















在RadioGroup的外面加了一个FrameLayout,主要是为了使用TextView显示消息数量,这里是居中靠左60dip,可能你会问直接写死能支持多分辨率吗,这个我在320*480的手机上试过没问题的,因为dip是与设备无关的支持多分辨率,至于1280*800平板电脑这样的分辨率我就不能保证了,哈哈!
接下来是样式布局:
代码如下:


12.0dip
center_horizontal
@drawable/bg_checkbox_menus
fill_parent
wrap_content
@null
@color/white
1.0
2.0dip
2.0dip


在drawable下bg_checkbox_menus.xml
代码如下:







其他的那四个都合这个一样点击后图片换成亮色的,所以就不一一贴出来了。
最后看MainActivity这个类:
代码如下:

package cn.com.karl.test;
import android.app.TabActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;
import android.widget.TabHost;
import android.widget.TextView;
public class MainActivity extends TabActivity {
/** Called when the activity is first created. */
private TabHost tabHost;
private TextView main_tab_new_message;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main);
main_tab_new_message=(TextView) findViewById(R.id.main_tab_new_message);
main_tab_new_message.setVisibility(View.VISIBLE);
main_tab_new_message.setText("10");
tabHost=this.getTabHost();
TabHost.TabSpec spec;
Intent intent;
intent=new Intent().setClass(this, AddExamActivity.class);
spec=tabHost.newTabSpec("添加考试").setIndicator("添加考试").setContent(intent);
tabHost.addTab(spec);
intent=new Intent().setClass(this,MyExamActivity.class);
spec=tabHost.newTabSpec("我的考试").setIndicator("我的考试").setContent(intent);
tabHost.addTab(spec);
intent=new Intent().setClass(this, MyMessageActivity.class);
spec=tabHost.newTabSpec("我的通知").setIndicator("我的通知").setContent(intent);
tabHost.addTab(spec);
intent=new Intent().setClass(this, SettingActivity.class);
spec=tabHost.newTabSpec("设置").setIndicator("设置").setContent(intent);
tabHost.addTab(spec);
tabHost.setCurrentTab(1);
RadioGroup radioGroup=(RadioGroup) this.findViewById(R.id.main_tab_group);
radioGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() {

@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
// TODO Auto-generated method stub
switch (checkedId) {
case R.id.main_tab_addExam://添加考试
tabHost.setCurrentTabByTag("添加考试");
break;
case R.id.main_tab_myExam://我的考试
tabHost.setCurrentTabByTag("我的考试");
break;
case R.id.main_tab_message://我的通知
tabHost.setCurrentTabByTag("我的通知");
break;
case R.id.main_tab_settings://设置
tabHost.setCurrentTabByTag("设置");
break;
default:
//tabHost.setCurrentTabByTag("我的考试");
break;
}
}
});
}
}

这样就完成了,主要还是使用了tabhost完成,tabhost有缓存机制这四个界面都会缓存到内存中,这样即有利也有弊,有利是因为切换的时候不用在重新加载了,有弊是因为缓存四个界面会耗费内存较多一些。如果只想缓存一个界面以后下一篇我会使用ActivityGroup实现顶部滑动栏,就像网易新闻的顶部滑动栏我相信也是只缓存了一个界面,切换的时候是从数据库加载的,所以第二次滑动加载会比较快。

    
 
 

您可能感兴趣的文章:

  • android 选项卡(TabHost)如何放置在屏幕的底部
  • Android顶部工具栏和底部工具栏的简单实现代码
  • Android仿UC底部菜单栏实现原理与代码
  • Android仿QQ空间底部菜单示例代码
  • Android 导航菜单 RibbonMenu
  • android 自定义Android菜单背景的代码
  • android实现始终显示overflow菜单的方法
  • Android动态添加menu菜单的简单方法
  • 用Android MenuInflater创建菜单项的方法步骤
  • Android界面设计(APP设计趋势 左侧隐藏菜单右边显示content)
  • Android Spinner 下拉菜单的使用
  • android游戏载入的activity跳转到游戏主菜单的activity具体实现
  • android教程之使用popupwindow创建菜单示例
  • android在连拍菜单中增加连拍张数选项功能实现代码
  • android 如何在 主菜单 来一键点图标, 播放视频(产品广告),只要驱动部分的JAVA层我不写
  • Android 2.3.7.r1 camera录像过程中按menu菜单键时会停止录像
  • 在Android中创建菜单项Menu以及获取手机分辨率的解决方法
  • Android开发技巧之我的菜单我做主(自定义菜单)
  • Android 关机弹出选择菜单的深入解析
  • Android滑动式菜单 SlidingMenu
  • Android ListView长按弹出菜单二种实现方式示例
  • android popwindow实现左侧弹出菜单层及PopupWindow主要方法介绍
  • Android提高之多级树形菜单的实现方法
  • Android Metro菜单实现思路及代码
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Android增量升级的方法和原理详细介绍
  • android Setting中隐藏项实现原理与代码
  • android开机自启动原理与实现案例(附源码)
  • android IntentService实现原理及内部代码分享
  • Android裁剪图片为圆形图片的实现原理与代码
  • 解析android 流量监测的实现原理
  • Android系统开发中log的使用方法及简单的原理
  • Android应用图标在状态栏上显示实现原理
  • Android基站定位原理及实现代码
  • Android在listview添加checkbox实现原理与代码
  • android开发之蜂鸣提示音和震动提示的实现原理与参考代码
  • android 键盘事件和屏幕事件的运行原理及交互实现
  • android:照片涂画功能实现过程及原理详解
  • Android检测Cursor泄漏的原理以及使用方法
  • android书架效果实现原理与代码
  • Android 进程间通信实现原理分析
  • Android 操作系统获取Root权限 原理详细解析
  • android 大图片拖拽并缩放实现原理
  • Android仿QQ登陆窗口实现原理
  • Android开发之串口编程原理和实现方式
  • 申请Android Map 的API Key(v2)的最新申请方式(SHA1密钥)
  • Android瀑布流实例 android_waterfall
  • Android开发需要的几点注意事项总结
  • Android系统自带样式 (android:theme)
  • android 4.0 托管进程介绍及优先级和回收机制
  • Android网络共享软件 Android Wifi Tether
  • Android访问与手机通讯相关类的介绍
  • Android 图标库 Android GraphView
  • Android及andriod无线网络Wifi开发的几点注意事项
  • 轻量级Android开发工具 Android Tools
  • Android 2.3 下StrictMode介绍


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3