博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android TabHost中实现标签的滚动以及一些TabHost开发的奇怪问题
阅读量:4641 次
发布时间:2019-06-09

本文共 3840 字,大约阅读时间需要 12 分钟。

最近在使用TabHost的时候遇到了一些奇怪的问题,在这里总结分享备忘一下。

首先说一点TabActivity将会被FragmentActivity所替代,但是本文中却是使用的TabActivity。

下面说说本程序能够实现的功能:

  1. 实现TabHost中的标题栏能够横向滚动;
  2. 自定义标题栏的大小和样式;
  3. 自定义标题栏的分割线的样式;

下面分几步来分别实现以上的功能:

第一步,先实现一个基本的TabHost的展现

详细的说明可以在网上其它地方搜的,主要就是注意一点,控件的id的是固定的不能随便更改,并且@和id之间不能加+;

Activity的代码如下:

public class TabhostTestActivity extends TabActivity implements        TabContentFactory {    private final String[] tabTitle = { "测试Tab标签1", "测试Tab标签2", "测试Tab标签3",            "测试Tab标签4", "测试Tab标签5", "测试Tab标签6", "测试Tab标签7", "测试Tab标签8",            "测试Tab标签9" };    /** Called when the activity is first created. */    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.tabhost);        TabHost th = getTabHost();        for (int i = 0; i < tabTitle.length; i++) {            TextView view = (TextView) getLayoutInflater().inflate(                    R.layout.tabwighet, null);            view.setText(tabTitle[i]);            th.addTab(th.newTabSpec(tabTitle[i]).setIndicator(view)                    .setContent(this));        }    }    @Override    public View createTabContent(String tag) {        View view = new View(this);        if (tabTitle[0].equals(tag)) {            view.setBackgroundColor(Color.BLUE);        } else if (tabTitle[1].equals(tag)) {            view.setBackgroundColor(Color.CYAN);        } else if (tabTitle[2].equals(tag)) {            view.setBackgroundColor(Color.DKGRAY);        } else if (tabTitle[3].equals(tag)) {            view.setBackgroundColor(Color.GRAY);        } else if (tabTitle[4].equals(tag)) {            view.setBackgroundColor(Color.GREEN);        } else if (tabTitle[5].equals(tag)) {            view.setBackgroundColor(Color.LTGRAY);        } else if (tabTitle[6].equals(tag)) {            view.setBackgroundColor(Color.MAGENTA);        } else if (tabTitle[7].equals(tag)) {            view.setBackgroundColor(Color.RED);        } else if (tabTitle[8].equals(tag)) {            view.setBackgroundColor(Color.YELLOW);        }        return view;    }}

对应的layout的xml如下:

运行后的效果图如下(平板1280*800的设备):

第二步,给标签栏添加横向的滚动操作

这个很简单,只需要修改一下tabhost.xml即可:

运行效果如下:

第三步,修改标签的宽度和高度

这里要改2个地方,一个是activity中,一个是tabwighet.xml中;

首先说明一下tabwighet.xml修改,代码如下:

其中需要注意一点,设置标签的宽度和高度不能设置到LinearLayout上,否则设置的宽度和高度不起作用。

Activity的修改就很简单了,根据tabwighet.xml的修改稍微调整一下代码即可,修改的代码如下:

LinearLayout view = (LinearLayout) getLayoutInflater().inflate(                     R.layout.tabwighet, null);             ((TextView) view.findViewById(R.id.tv_title)).setText(tabTitle[i]);

运行的效果如下:

第四步,修改标签的样式,增加背景图片和选中的状态,以及选中后的字体的颜色

 首先修改tabhost.xml文件,为HorizontalScrollView和FrameLayout添加设置background的属性,图片自己选个即可。代码如下:

然后在drawable文件夹中添加2个selector,一个是用来设置选中的标签的背景的,一个是用来设置选中的字体颜色变化的,代码如下:

最后修改tabwighet.xml将样式添加到标签上:

运行效果如下:

第五步,添加tabhost中标签间的分割线

修改tabhost.xml的代码为:

     
  

效果图如下:

以上几步就完成了我们预定的3个功能。

下面是我在开发中遇到的几个特使的问题,总结一下并列出我的解决方法:

1.标签的宽度总是设置不成功——请参照第三步操作,这里注意设置最外边的view的宽度是不能控制标签的宽度的。

2.标签间设置的自定义分割图片总是不显示——检查AndroidManifest.xml中是不是设置了application的 android:theme属性,如果设置成了@android:style/Theme.NoTitleBar,那么设置的分割是不能正常显示的(初步 测试设置了与NoTitleBar有关的样式的属性都不能显示),如果设置这个属性是为了隐藏actionbar,建议修改成 @android:style/Theme.DeviceDefault.NoActionBar。

 

转载于:https://www.cnblogs.com/zhujiabin/p/4276492.html

你可能感兴趣的文章
【转载】掌 握 3 C ‧ 迎 接 亮 丽 职 涯
查看>>
爬取网站附件
查看>>
java基础图形界面和IO系统
查看>>
javascript学习笔记
查看>>
hdu 3996
查看>>
python第三十九课——面向对象(二)之初始化属性
查看>>
python学习笔记之函数装饰器
查看>>
FEM计算2D瞬态热传导方程
查看>>
四年时光,匆匆而过
查看>>
【php】【psr】psr1 基础编码规范
查看>>
WAF SSI
查看>>
LDAP & it's implementation
查看>>
Apache HttpComponents中的cookie匹配策略
查看>>
冰封的海盗攻略
查看>>
python from entry to abandon
查看>>
Netty4.x中文教程系列(四) 对象传输
查看>>
linux下find命令使用举例、
查看>>
GET请求在Tomcat中的传递及URI传递
查看>>
ubuntun 服务器与Mac
查看>>
重温JSP学习笔记--与日期数字格式化有关的jstl标签库
查看>>