Android美化TabWidget详细代码
android默认的tabwidget是置顶的,有时放在下面比较好看,但是使用默认的tabwidget放在下面看上去效果非常不好看,由此对其美化一下。设置其背景,以及选中的tab和未被选中的tab差异化,同时去掉了烦人了白线,同时对被选中和未被选中的标签进行区别,效果还可以。看代码。
预先准备好几个资源文件,然后在extends TabActivity的那个class中加进这个函数,找个地方调用它,就OK了。
//记得先定义这几个变量 private TabHost tabHost; private TabWidget tabWidget; Field mBottomLeftStrip; Field mBottomRightStrip; public TabHost makeTab(){ if(this.tabHost == null){ tabHost = (TabHost)findViewById(android.R.id.tabhost); tabWidget = (TabWidget)findViewById(android.R.id.tabs); tabHost.setup(); tabHost.bringToFront(); TabSpec nearby_tab = tabHost.newTabSpec("nearby_tab"); TabSpec history_tab = tabHost.newTabSpec("history_tab"); TabSpec about_tab = tabHost.newTabSpec("about_tab"); nearby_tab.setIndicator("first",getResources().getDrawable(R.drawable.first)).setContent(new Intent(this,first.class)); history_tab.setIndicator("second",getResources().getDrawable(R.drawable.second)).setContent(new Intent(this,second.class)); about_tab.setIndicator("third",getResources().getDrawable(R.drawable.third)).setContent(new Intent(this,third.class)); tabHost.addTab(nearby_tab); tabHost.addTab(history_tab); tabHost.addTab(about_tab); if (Integer.valueOf(Build.VERSION.SDK) <= 7) { try { mBottomLeftStrip = tabWidget.getClass().getDeclaredField ("mBottomLeftStrip"); mBottomRightStrip = tabWidget.getClass().getDeclaredField ("mBottomRightStrip"); if(!mBottomLeftStrip.isAccessible()) { mBottomLeftStrip.setAccessible(true); } if(!mBottomRightStrip.isAccessible()){ mBottomRightStrip.setAccessible(true); } mBottomLeftStrip.set(tabWidget, getResources().getDrawable (R.drawable.linee)); mBottomRightStrip.set(tabWidget, getResources().getDrawable (R.drawable.linee)); } catch (Exception e) { e.printStackTrace(); } } else { try { mBottomLeftStrip = tabWidget.getClass().getDeclaredField("mLeftStrip"); mBottomRightStrip = tabWidget.getClass().getDeclaredField("mRightStrip"); if (!mBottomLeftStrip.isAccessible()) { mBottomLeftStrip.setAccessible(true); } if (!mBottomRightStrip.isAccessible()) { mBottomRightStrip.setAccessible(true); } mBottomLeftStrip.set(tabWidget, getResources().getDrawable(R.drawable.linee)); mBottomRightStrip.set(tabWidget, getResources().getDrawable(R.drawable.linee)); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } for (int i =0; i <tabWidget.getChildCount(); i++) { final TextView tv = (TextView) tabWidget.getChildAt(i).findViewById(android.R.id.title); tv.setTextColor(Color.WHITE); View vvv = tabWidget.getChildAt(i); if(tabHost.getCurrentTab()==i){ vvv.setBackgroundDrawable(getResources().getDrawable(R.drawable.focus)); } else { vvv.setBackgroundDrawable(getResources().getDrawable(R.drawable.unfocus)); } } tabHost.setOnTabChangedListener(new OnTabChangeListener(){ @Override public void onTabChanged(String tabId) { // TODO Auto-generated method stub for (int i =0; i < tabWidget.getChildCount(); i++) { View vvv = tabWidget.getChildAt(i); if(tabHost.getCurrentTab()==i){ vvv.setBackgroundDrawable(getResources().getDrawable(R.drawable.focus)); } else { vvv.setBackgroundDrawable(getResources().getDrawable(R.drawable.unfocus)); } } } }); } else{ return tabHost; } return null; }
用到的布局xml文件内容如下:
<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"> <LinearLayout android: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="wrap_content" android:layout_weight="1"> </FrameLayout> <TabWidget android:id="@android:id/tabs" android:layout_width="fill_parent" android:layout_alignParentBottom="true" android:layout_height="wrap_content"/> </LinearLayout> </TabHost>
相关文章
上一篇: Android关闭所有Activity完全退出程序下一篇: 苹果系统显示隐藏文件切换脚本
楼主,求源码学习,感谢!
楼主,求源码学习,感谢! 105583235@qq.com
求源码学习!
博主好,求源码。yangzl2008#126.com
@SnowBall:已发,看你邮箱吧~
thank you
博主您好,求源码学习,感谢!
seefish1030@hotmail.com
求教楼主
是怎么去除TabWidget下面那条线的?
哪几行代码实现的?
大神,今天下午都在研究tabwidget,看到这个帖子感觉非常好,不过我刚学安卓一周,有些代码不是很明白,能发一下原代码吗,谢谢了!!!451398240@qq.com
@seefish:代码已发
@chenxing:代码已发
@studying:第26到58行实现了那条线的隐藏
正在学习android编程,这个帖子非常好,能否将几个资源文件发送给我吗?
多谢!
以后遇见问题还希望得到大师的指点!
szzxh@139.com
我要资源2文件~~~~
我也要~~
@高峰:已发
学生党,求资源文件···大师指点··
希望大神能把源代码发给我看一下。Android初学着求教育
@lvy:已发
@mokejun:已发