我正在尝试创建一个选项卡主机,如所附屏幕截图所示,但图标图像和文本对齐存在问题 - 图像需要在文本上方对齐,但所有尝试均失败;
我已经包含了一些示例代码,但我无法强制文本的图像顶部对齐 - 只有当我将 tab_indicator 文件中的 layout_height 增加到大于 66dip 但我在空间和提供的图像方面受到限制时,它才有效。如果您看不到图像/链接,则图像不会强制位于文本上方,因此图像的一部分位于文本后面!
tab_indicator.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="88.0dip"
android:layout_height="66.0dip"
android:layout_weight="1.0">
<include layout="@layout/tab_indicator_portrait" />
</FrameLayout>
tabindicator_protrait.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tab_indicator_portrait"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:paddingBottom="3.0dip"
android:paddingTop="3.0dip" >
<ImageView
android:id="@+id/icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top|center"
android:layout_marginTop="3.0dip" />
<TextView
android:id="@+id/title"
style="?android:attr/tabWidgetStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|center"
android:textColor="@color/tab_indicator_text"
android:textSize="12.0dip" />
</FrameLayout>
tab_host.xml
<?xml version="1.0" encoding="utf-8"?>
<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:id="@+id/topLayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:padding="0.0dip" >
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="0.0dip"
android:layout_weight="1.0" />
<TabWidget
android:id="@android:id/tabs"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_margin="0dip"
android:padding="0dip" />
</LinearLayout>
</TabHost>
我有这样的设置有几个原因;
- tab_indicator.xml 文件还可以包含一个景观文件,如果我需要以不同的方式处理景观,即基于市场反馈/测试的进一步发布
- 允许应用程序具有通用的外观和感觉,因为我只希望在用户在选项卡之间移动时更改图标 - 在 4.0.4 中与 tabhost 存在问题,这似乎是一种更简洁的处理方式。
我在 TabActivity 中尝试了一些代码来处理基于屏幕大小的布局大小;
private void detectScreen()
{
Display localDisplay = getWindowManager().getDefaultDisplay();
if (localDisplay.getWidth() < localDisplay.getHeight())
{
int dips = 45;
TabHost localTabHost = getTabHost();
DisplayMetrics localDisplayMetrics = getResources().getDisplayMetrics();
for (int i = 0; i < localTabHost.getTabWidget().getTabCount(); i++)
{
View localView = localTabHost.getTabWidget().getChildTabViewAt(i);
localView.getLayoutParams().height = ImageUtils.convertDIPToPixels(localDisplayMetrics, (float)dips);
}
}
}
但同样,更改布局的大小确实会使图像变小但与文本不对齐。
清单文件还包含以下内容;
<supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:smallScreens="true"/>