0

我正在尝试创建一个选项卡主机,如所附屏幕截图所示,但图标图像和文本对齐存在问题 - 图像需要在文本上方对齐,但所有尝试均失败;

如果无法在此处查看链接,请 PM For Image

我已经包含了一些示例代码,但我无法强制文本的图像顶部对齐 - 只有当我将 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"/>
4

1 回答 1

0

更改指标的代码。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="120dip"
    android:layout_height="64dip"
    android:layout_weight="1"
    android:orientation="vertical"
    android:padding="5dp" >

    <ImageView
        android:id="@+id/icon"
        android:layout_width="30dip"
        android:layout_height="30dip"
        android:layout_centerHorizontal="true"
        android:contentDescription="@string/cntDesc" />

    <TextView
        android:id="@+id/title"
        style="?android:attr/tabWidgetStyle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true" />

</RelativeLayout>

这对我来说很有效

于 2012-11-28T12:43:52.367 回答