在 Android 中自定义状态选项卡
Posted
技术标签:
【中文标题】在 Android 中自定义状态选项卡【英文标题】:Customizing tabs on state in Android 【发布时间】:2010-10-20 21:30:27 【问题描述】:我知道如何将图标放在每个选项卡上,这没问题。我也遇到了这个: [堆栈溢出线程几乎相同][1]
我点击了该问题中的一个链接并找到了 [this][2]
差不多,它说要使用 XML 中定义的选择器,当然,确实做到了。但是没有与它关联的 id,所以我不确定如何将选择器功能作为可绘制对象,因此我可以将其用作选项卡的图标。也许我正在以错误的方式解决这个问题。但这就是我所拥有的,显然缺少一些东西。
<selector
android:id="@+id/myselector"
xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Non focused states -->
<item
android:state_focused="false"
android:state_selected="false"
android:state_pressed="false"
android:drawable="@drawable/darklogo" />
<item
android:state_focused="false"
android:state_selected="true"
android:state_pressed="false"
android:drawable="@drawable/lightlogo" />
<!-- Focused states -->
<item
android:state_focused="true"
android:state_selected="false"
android:state_pressed="false"
android:drawable="@drawable/lightlogo" />
<item
android:state_focused="true"
android:state_selected="true"
android:state_pressed="false"
android:drawable="@drawable/lightlogo" />
<!-- Pressed -->
<item
android:state_pressed="true"
android:drawable="@drawable/lightlogo" />
</selector>
在我的代码中,使用以下命令生成了一个示例选项卡:
host.addTab(host.newTabSpec("three")
.setIndicator("map",drawables)
.setContent(new Intent(this, Map.class)));
现在 drawable 只是对可绘制图像资源的引用。如何使选择器成为可绘制对象?
这是我的问题 [1]:Updating Android Tab Icons [2]:http://groups.google.com/group/android-evelopers/browse_thread/thread/ef3bdebcb715b385
【问题讨论】:
【参考方案1】:您在此处包含的 XML 是一种定义可绘制对象的方法,可让您嵌入 case 语句。它根据分配给它的视图的状态呈现不同的可绘制对象。作为可绘制对象,您应该将其保存为 xml 文件,并保存在项目的 res/drawable
文件夹中(例如 tabselector.xml
)。
要将其用于 Tabhost,您需要像往常一样构造 TabActivity(如 tutorial example 所示)。
然后,当您将每个选项卡添加到主机时,将 tabselector
可绘制对象指定为指示器,如下面的“TAB 1”所示。
Drawable mySelector = getResources().getDrawable(R.drawable.tabselector);
mTabHost.addTab(mTabHost.newTabSpec("tab_test1").setIndicator("TAB 1", mySelector).setContent(R.id.textview1));
mTabHost.addTab(mTabHost.newTabSpec("tab_test2").setIndicator("TAB 2").setContent(R.id.textview2));
注意:此时您无法更改图标后面的选项卡背景颜色。
【讨论】:
像往常一样。非常感谢。我认为我的可绘制文件夹没有它是我更大的问题。感谢您包含一些让我感动的代码。我很感激。 现在可以吗?我的意思是你的说明声明。请检查我的问题:***.com/questions/2810075/…【参考方案2】:您可以将视图用作指示器,这样您就可以按照自己的方式对其进行自定义。
mTabHost.addTab(mTabHost.newTabSpec("tab_test1").setIndicator(View MyView).setContent(R.id.textview1));
mTabHost.addTab(mTabHost.newTabSpec("tab_test2").setIndicator("TAB 2").setContent(R.id.textview2));
第一个选项卡将使用 View 作为其指示器,第二个选项卡将使用 CharSequence。看看实际的 TabSpec 类 (http://developer.android.com/reference/android/widget/TabHost.TabSpec.html)。
【讨论】:
以上是关于在 Android 中自定义状态选项卡的主要内容,如果未能解决你的问题,请参考以下文章