Android底部菜单栏(图片+文字)
虽然网上有很多底部菜单栏的实现方式,但是实现方式各种各样,很多也不符合自己的口味,所以还是总结下底部菜单栏的实现方式,以便以后方便查询使用
实现方式一:通过TabWidget实现
这种方式主要是在布局中将TabWidget标签嵌套在RelativeLayout中,并且在TabWidget标签中中设置 android:layout_alignParentBottom="true"
另外,下划线和选项卡之间的线去除的方法时在TabWidget标签中设置属性android:tabStripEnabled="false"
main.xml
<?xml version="1.0" encoding="utf-8"?> <TabHost xmlns:android="http://schemas.android.com/apk/res/android"android:id="@android:id/tabhost"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical" ><FrameLayout android:id="@android:id/tabcontent"android:layout_width="fill_parent"android:layout_height="fill_parent"android:padding="5dp"></FrameLayout><RelativeLayoutandroid:layout_width="fill_parent"android:layout_height="fill_parent"><!-- tabStripEnabled属性去掉底部下划线与选项卡间的下划线 --><!-- layout_alignParentBottom属性即可将其放在底部菜单栏,注意,必须在RelativeLayout里 --><TabWidget android:id="@android:id/tabs"android:tabStripEnabled="false"android:background="#6E6E6E"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_alignParentBottom="true"></TabWidget></RelativeLayout></TabHost>
主要代码
package com.loulijun.demo1;import android.app.TabActivity; import android.content.Intent; import android.os.Bundle; import android.widget.TabHost;public class Demo1Activity extends TabActivity {/** Called when the activity is first created. */private TabHost tabhost;private Intent intent1, intent2, intent3, intent4;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);tabhost = getTabHost();intent1 = new Intent(Demo1Activity.this, One.class);tabhost.addTab(tabhost.newTabSpec("one").setIndicator("电话",getResources().getDrawable(android.R.drawable.ic_menu_call)).setContent(intent1));intent2 = new Intent(Demo1Activity.this, Two.class);tabhost.addTab(tabhost.newTabSpec("two").setIndicator("相机",getResources().getDrawable(android.R.drawable.ic_menu_camera)).setContent(intent2));intent3 = new Intent(Demo1Activity.this, Three.class);tabhost.addTab(tabhost.newTabSpec("three").setIndicator("分享",getResources().getDrawable(android.R.drawable.ic_menu_share)).setContent(intent3));intent4 = new Intent(Demo1Activity.this, Four.class);tabhost.addTab(tabhost.newTabSpec("four").setIndicator("更多",getResources().getDrawable(android.R.drawable.ic_menu_more)).setContent(intent4));} }
运行效果如下:
实现方式二:隐藏TabWidget,通过RadioGroup和RadioButton实现底部菜单栏
这种方式更漂亮,网上基本用的是这种方式,通过setCurrentTabByTag来切换不同的选项卡
main.xml
<?xml version="1.0" encoding="utf-8"?> <TabHost xmlns:android="http://schemas.android.com/apk/res/android"android:id="@android:id/tabhost"android:layout_width="fill_parent"android:layout_height="fill_parent"><LinearLayoutandroid:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"><FrameLayout android:id="@android:id/tabcontent"android:layout_width="fill_parent"android:layout_height="0.0dip"android:layout_weight="1.0"/><TabWidget android:id="@android:id/tabs"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_weight="0.0"android:visibility="gone"/><RadioGroupandroid:id="@+id/main_tab"android:background="@drawable/maintab_toolbar_bg"android:orientation="horizontal"android:layout_width="fill_parent"android:layout_height="wrap_content"android:gravity="center_vertical"android:layout_gravity="bottom"><RadioButton android:layout_marginTop="2.0dip"android:text="@string/main_home"android:drawableTop="@drawable/icon_1_n"android:id="@+id/radio_button0"style="@style/main_tab_bottom"/><RadioButton android:layout_marginTop="2.0dip"android:text="@string/main_news"android:drawableTop="@drawable/icon_2_n"android:id="@+id/radio_button1"style="@style/main_tab_bottom"/><RadioButton android:layout_marginTop="2.0dip"android:text="@string/main_my_info"android:drawableTop="@drawable/icon_3_n"android:id="@+id/radio_button2"style="@style/main_tab_bottom"/><RadioButton android:layout_marginTop="2.0dip"android:text="@string/menu_search"android:drawableTop="@drawable/icon_4_n"android:id="@+id/radio_button3"style="@style/main_tab_bottom"/><RadioButton android:layout_marginTop="2.0dip"android:text="@string/more"android:drawableTop="@drawable/icon_5_n"android:id="@+id/radio_button4"style="@style/main_tab_bottom"/></RadioGroup></LinearLayout> </TabHost>
drawable/home_btn_bg.xml:切换时的效果
<?xml version="1.0" encoding="UTF-8"?> <selectorxmlns:android="http://schemas.android.com/apk/res/android"><item android:state_focused="true" android:state_enabled="true" android:state_pressed="false" android:drawable="@drawable/home_btn_bg_s" /><item android:state_enabled="true" android:state_pressed="true" android:drawable="@drawable/home_btn_bg_s" /><item android:state_enabled="true" android:state_checked="true" android:drawable="@drawable/home_btn_bg_d" /><item android:drawable="@drawable/transparent" /> </selector>
string/dimens.xml 尺寸文件
<?xml version="1.0" encoding="utf-8"?> <resources><dimen name="bottom_tab_padding_drawable">2.0dip</dimen><dimen name="bottom_tab_padding_up">5.0dip</dimen><dimen name="bottom_tab_font_size">10.0dip</dimen> </resources>
string/drawables.xml 设置为透明
<?xml version="1.0" encoding="utf-8"?> <resources> <item type="drawable" name="transparent">#00000000</item> </resources>
string/styles.xml 样式文件
<?xml version="1.0" encoding="utf-8"?> <resources> <style name="main_tab_bottom"><item name="android:textSize">@dimen/bottom_tab_font_size</item><item name="android:textColor">#ffffffff</item><item name="android:ellipsize">marquee</item><item name="android:gravity">center_horizontal</item><item name="android:background">@drawable/home_btn_bg</item><item name="android:paddingTop">@dimen/bottom_tab_padding_up</item><item name="android:layout_width">fill_parent</item><item name="android:layout_height">wrap_content</item><item name="android:button">@null</item><item name="android:singleLine">true</item><item name="android:drawablePadding">@dimen/bottom_tab_padding_drawable</item><item name="android:layout_weight">1.0</item> </style> </resources>
主要的代码
package com.loulijun.demo2;import android.app.TabActivity; import android.content.Intent; import android.os.Bundle; import android.view.Window; import android.widget.RadioGroup; import android.widget.TabHost; import android.widget.RadioGroup.OnCheckedChangeListener; public class MainTabActivity extends TabActivity implements OnCheckedChangeListener{private RadioGroup mainTab;private TabHost tabhost;private Intent iHome;private Intent iNews;private Intent iInfo;private Intent iSearch;private Intent iMore;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.main);mainTab=(RadioGroup)findViewById(R.id.main_tab);mainTab.setOnCheckedChangeListener(this);tabhost = getTabHost();iHome = new Intent(this, HomeActivity.class);tabhost.addTab(tabhost.newTabSpec("iHome").setIndicator(getResources().getString(R.string.main_home), getResources().getDrawable(R.drawable.icon_1_n)).setContent(iHome));iNews = new Intent(this, NewsActivity.class);tabhost.addTab(tabhost.newTabSpec("iNews").setIndicator(getResources().getString(R.string.main_news), getResources().getDrawable(R.drawable.icon_2_n)).setContent(iNews));iInfo = new Intent(this, MyInfoActivity.class);tabhost.addTab(tabhost.newTabSpec("iInfo").setIndicator(getResources().getString(R.string.main_my_info), getResources().getDrawable(R.drawable.icon_3_n)).setContent(iInfo));iSearch = new Intent(this,SearchActivity.class);tabhost.addTab(tabhost.newTabSpec("iSearch").setIndicator(getResources().getString(R.string.menu_search), getResources().getDrawable(R.drawable.icon_4_n)).setContent(iSearch));iMore = new Intent(this, MoreActivity.class);tabhost.addTab(tabhost.newTabSpec("iMore").setIndicator(getResources().getString(R.string.more), getResources().getDrawable(R.drawable.icon_5_n)).setContent(iMore));}@Overridepublic void onCheckedChanged(RadioGroup group, int checkedId) {switch(checkedId){case R.id.radio_button0:this.tabhost.setCurrentTabByTag("iHome");break;case R.id.radio_button1:this.tabhost.setCurrentTabByTag("iNews");break;case R.id.radio_button2:this.tabhost.setCurrentTabByTag("iInfo");break;case R.id.radio_button3:this.tabhost.setCurrentTabByTag("iSearch");break;case R.id.radio_button4:this.tabhost.setCurrentTabByTag("iMore");break;}}}
效果图
下载地址:
http://files.cnblogs.com/loulijun/SinaWeibo.zip
下面是几个参考:
农民伯伯:
http://www.cnblogs.com/over140/archive/2011/03/02/1968042.html
http://www.cnblogs.com/over140/archive/2010/08/30/1812290.html
kjsolo
http://www.cnblogs.com/soloho/archive/2012/03/17/2403232.html
Android底部菜单栏(图片+文字)相关推荐
- android底部菜单栏demo
上一个项目已经做完了,这周基本上没事,所以整理了下以前的项目,想把一些通用的部分封装起来,这样以后遇到相似的项目就不用重复发明轮子了,也节省了开发效率.今天把demo贴出来一是方便以后自己查询,二是希 ...
- Android底部菜单栏 仿微博效果
实现方式一:通过TabWidget实现 这种方式主要是在布局中将TabWidget标签嵌套在RelativeLayout中,并且在TabWidget标签中中设置 android:layout_alig ...
- android radiogroup 底部菜单,Android底部菜单栏(RadioGroup+Fragment)美化
众所周知,android的底部菜单栏太重要,平时项目一般都是需要用到的,但是网上关于这方面的demo做得太丑了,实在惨不忍睹,所以这里便用RadioGroup+Fragment的方式写了一个,顺便美化 ...
- 【Android UI】图片 + 文字展示by SpannableStringBuilder
起源 图片和文字混合展示,比如这么个需求,需要在每段文字的左边要有一个小圆点,(小圆点符号在android系统中并不支持). 先用TextView的setDrawableLeft, 嗯,达到要求,那么 ...
- Android 原生分享图片文字到微信
分享纯文字 Activity代码使用 shareWechatFriend(MainActivity.this, "这里是分享的内容"); 方法shareWechatFriend(C ...
- android图片放大失真,Android中解决图片文字放大失真的问题
1 背景自适应且不失真问题的存在背景自适应且不失真问题的存在 制作自适应背景图片是 UI 开发的一个广泛问题 也是界面设计师渴望解决的问题 我 相信我们彼此都深有体会 比如 列表的背景图一定 但是列表 ...
- Android底部菜单栏、Android沉浸式状态栏(顶部状态栏修改颜色)、自定义标题栏
0.简介: 没有使用TabHost切换,而是变成FragmentActivity替换Fragment:沉浸式引用的git上面的jar包. 先看图片 1.底部导航栏 核心代码 <span styl ...
- android 自定义菜单栏,GitHub - earthWo/AndroidBottomNavigation: android 底部菜单栏,自定义样式,自定义菜单数量,添加滚动动画和水波纹动画...
AndroidBottomNavigation 截图 使用方法 gradle: compile 'com.whitelife.library:library:1.0.1' maven: com.whi ...
- 公众号推文、底部菜单栏怎样实现调用手机拨打电话号码?
如何实现点击一个按键就能跳转到拨打电话界面呢?我最近发现了一个小程序–微电话,感觉使用起来十分方便,对比一下之前看到一些电话还要记下电话号码,然后打开拨号界面,拨号,这种流程来说简直方便多了!下面我们 ...
最新文章
- CentOS 8 已是绝版?还有后续么?
- Android多媒体开发:录音机
- 猴子偷桃php代码,C++实现猴子吃桃的示例代码
- 数据结构与算法 - 稀疏数组(理解+代码实现案例)
- 安农大计算机调剂,2020年安徽农业大学硕士研究生调剂公告
- SqlSever分页查询,仅扫描一次表
- Linux 中的各种栈:进程栈 线程栈 内核栈 中断栈
- PHPCMS商城:模块_购物车+订单模块(资源合集)
- AngularJs HelloWorld
- matlab数字信号处理与应用 张德丰,MATLAB数字信号处理与应用
- 计算机论文有哪些方向,计算机论文研究方向有以下四类
- NLP之文本分类方法之基础知识
- ios 图片合成幻灯片_为iPad构建iOS幻灯片应用程序
- Favicon.ico图片在线制作网站PHP源码+支持多种图片格式转换
- Illegal mix of collations
- Android打开第三方地图使用方法
- 【Qt炫酷动画】demo02-仿苹果对话框淡入淡出的动画
- 学习C++该看什么书?
- 思科—三层交换机实现不同vlan的PC互通
- I am a MCAD.
热门文章
- linux内核计算次方,linux内核bic和cubic实现
- js eval Uncaught SyntaxError: unexpected token: ‘:‘
- linux-架构-网络波动
- Android Studio怎么把查看代码的左箭头、右箭头图标加到右边的快捷工具栏
- Java实现增删改查系统代码(全~纯干货)
- 区块链技术指南学习(五)双花
- 网易云音乐python爬虫搜索接口,评论接口,歌词接口
- S700K道岔故障诊断数据txt及故障诊断算法
- 土豆网王微:做自己生活的导演
- 怎么看计算机的网络ping值,Win7怎么查看ping值 win7测试ping值的方法