mhe*_*ens 11 tabs android android-tabhost
我的主要活动是TabActivity,但我的标签不需要图标.我知道我可以使用重载TabHost.TabSpec.setIndicator(CharSequence label)方法省略该图标,如本问题所述.
但是图标所在的空间仍然保留,因此浪费了大量空间.在这个问题中已经提到了这一点.看来我不能只降低标签高度.我必须提供我自己View的TabHost.TabSpec.setIndicator(View view)超载.
很好,但我想确保其余的样式(背景/着色)在所有设备上始终保持"android",就像我使用了默认的标签指示器一样.所以我不想提供自己的颜色.
我发现@android:color/tab_indicator_text并使用它TextView的文本颜色似乎按预期工作.但我不知道从哪里获得默认的tab-background-colors.我也发现了这种@android:style/Widget.TabWidget风格,但是它既不适用TextView也不适用于周围环境LinearLayout似乎有所帮助.
这是我的标签指示器视图xml文件,取自一些教程:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tabLayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
android:padding="12dip" >
<TextView
android:id="@+id/tabText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@android:color/tab_indicator_text" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
如何获得"android默认"选项卡样式?
编辑:接下来,我尝试添加默认选项卡setIndicator(CharSequence),获取getBackground其指标视图的drawable,清除所有选项卡,添加我的自定义视图(见上文),然后将我检索到的drawable放入setBackground新指标.
结果看起来很正确,有点不对劲.首先,它们太高了,所以我什么都没得到.另一方面,所有选项卡的背景状态现在以某种方式链接(活动,突出显示,选择等).使用mutate()上绘制(S)没有帮助的.下一个技巧:我添加了三个默认选项卡,获取了所有背景,清除了它们,并给了我自己的三个选项卡,每个选项卡一个背景.
那么,这解决了第二个问题.他们的州不再联系在一起.但它们仍然太高了.所以我减少了TabWidget使用的高度updateViewLayout.这样可行,但在选项卡指示器的顶部留下变色条.
实际上,我最终会遇到与使用该TabHost.TabSpec.setIndicator(CharSequence label)方法时相同的情况.无论如何,所有这些黑客让我觉得很脏.是不是有一种优雅的方式来获得自定义视图上的默认android样式?
Jin*_*n35 10
此代码取自android源码tab_indicator.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="0dip"
android:layout_height="64dip"
android:layout_weight="1"
android:layout_marginLeft="-3dip"
android:layout_marginRight="-3dip"
android:orientation="vertical"
android:background="@android:drawable/tab_indicator">
<ImageView android:id="@+id/icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
/>
<TextView android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
style="?android:attr/tabWidgetStyle"
/>
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
您可以尝试自己使用这个代码,删除ImageView,变更layout_centerHorizontal的TextView,以layout_center,降低高度RelativeLayout,并提供这个观点TabHost.TabSpec.setIndicator(View view).只有@android资源引用,因此您不需要创建任何drawable或文本样式.
编辑
从应用程序看不到选项卡指示器的标准android可绘制背景,但可以这样做:
TabSpec tc = getTabHost().newTabSpec("tag");
tc.setIndicator("indicator1");
tc.setContent(content);
getTabHost().addTab(tc);
getTabHost().findViewById(android.R.id.icon).setVisibility(View.GONE);
TextView tv = (TextView) getTabHost().findViewById(android.R.id.title);
RelativeLayout.LayoutParams rllp = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
rllp.addRule(RelativeLayout.CENTER_IN_PARENT);
tv.setLayoutParams(rllp);
Run Code Online (Sandbox Code Playgroud)
然后可以减少标签的高度:
RelativeLayout parent = ((RelativeLayout) tv.getParent());
ViewGroup.LayoutParams vglp = parent.getLayoutParams();
vglp.height = android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
parent.setLayoutParams(vglp);
Run Code Online (Sandbox Code Playgroud)
结果将是: 
| 归档时间: |
|
| 查看次数: |
8948 次 |
| 最近记录: |