LOL押注正规APP关于TabHost的使用,网上有很多例子安卓新闻,也有很多教程。本来没有必要再进行重复这些东西,但是就在前一个项目,由于BOSS认为UI设计的没有震撼力,于是迫于压力更改UI。本人对色彩搭配实在是没有一点感觉,于是乎找来各大互联网公司的例子来看安卓新闻,碰巧奥运会,网易新闻推出了奥运版,动感十足,于是拿来参考。不料,网易大公司,重写了TabWidget。代码如下:
olympic_main_layout.xml
LOL押注正规APP但是安卓新闻,没办法,只能找些替代性的方案来仿制奥运版效果,于是乎找到了位于 C:\android-sdk-windows\platforms\android-8\data\res\layout目录下的tab_indicator.xml文件,也就是tabhost中TabWidget的所要表现的文件。同时在这个目录下,找到了tab_content.xml文件这两个文件的源代码分别是:
tab_content.xml
LOL押注正规APP
tab_indicator.xml
LOL押注正规APP
在这里我们只关注tab_indicator.xml文件
看到这里当然豁然开朗了,tab_indicator.xml文件使用了RelativeLayout而不是LinearLayout。这就使我们的自定义工作容易不少安卓新闻安卓新闻,于是在代码中对tab_indicator.xml文件进行了重新组合定位,实现了 底部效果
LOL押注正规APP
底部效果关键代码
for (int i = 0; i < tabWidget.getChildCount(); i++) { TextView tv = (TextView) tabWidget.getChildAt(i).findViewById( android.R.id.title); android.widget.RelativeLayout.LayoutParams tvp = new android.widget.RelativeLayout.LayoutParams( RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); tvp.addRule(RelativeLayout.ALIGN_PARENT_TOP); tvp.addRule(RelativeLayout.CENTER_HORIZONTAL); tv.setLayoutParams(tvp); ImageView iv = (ImageView) tabWidget.getChildAt(i).findViewById( android.R.id.icon); android.widget.RelativeLayout.LayoutParams ivp = new android.widget.RelativeLayout.LayoutParams( RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); ivp.addRule(RelativeLayout.CENTER_HORIZONTAL); ivp.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); iv.setLayoutParams(ivp); // 得到每个tab View vvv = tabWidget.getChildAt(i); // 设置背景色为透明 vvv.setBackgroundColor(Color.TRANSPARENT); // 设置字体颜色和大小 tv.setTextColor(this.getResources() .getColorStateList(R.color.white)); tv.setTextSize(15); }
顶部效果
顶部效果关键代码
for (int i = 0; i < tabWidget.getChildCount(); i++) { TextView tv = (TextView) tabWidget.getChildAt(i).findViewById( android.R.id.title); android.widget.RelativeLayout.LayoutParams tvp = new android.widget.RelativeLayout.LayoutParams( RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); tvp.addRule(RelativeLayout.CENTER_HORIZONTAL); //设置距离顶部6dip tvp.setMargins(0, 6, 0, 0); tv.setLayoutParams(tvp); ImageView iv = (ImageView) tabWidget.getChildAt(i).findViewById( android.R.id.icon); android.widget.RelativeLayout.LayoutParams ivp = new android.widget.RelativeLayout.LayoutParams( RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); ivp.addRule(RelativeLayout.CENTER_HORIZONTAL); ivp.setMargins(0, 6, 0, 0); iv.setLayoutParams(ivp); // 得到每个tab View vvv = tabWidget.getChildAt(i); // 设置背景色为透明 vvv.setBackgroundColor(Color.TRANSPARENT); // 设置字体颜色和大小 tv.setTextColor(this.getResources() .getColorStateList(R.color.white)); tv.setTextSize(15); }
整体效果
LOL押注正规APP这样就基本仿制了网易新闻奥运版。 源码下载地址