如何使 TabHost 定位并停靠在面板内,而不是全屏

How to make TabHost located and docked inside a panel, not full screen

我想得到如图所示的布局结构。 无论我尝试什么,它总是让 TabHost 分布在 Linear 上,进入全屏。

此布局结构已修改多次。我尝试了所有的重量和重力和 match_parent,填充父项.. 所有这些都使 TabHost 位于顶部,底部的 Linear 不可见。因此,如果您看到一些疯狂的标签,请不要感到惊讶 :)

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    android:layout_width="fill_parent"
    android:layout_weight="0"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <TabHost
        android:id="@+id/tabHost"
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal">

            <TabWidget
                android:id="@android:id/tabs"
                android:layout_width="match_parent"
                android:layout_height="wrap_content">
            </TabWidget>

    </TabHost>

    <LinearLayout
        android:layout_weight="1"
        android:background="@color/white"
        android:layout_height="60dp"
        android:layout_marginStart="0dp"
        android:layout_marginTop="0dp"
        android:layout_alignParentBottom="true"
        android:layout_width="fill_parent">

        <Button
            android:layout_width="100dp"
            android:layout_height="fill_parent"
            android:text="@string/finish_test"
            android:id="@+id/finishTest"
            android:background="@drawable/blueback"
            android:layout_alignParentRight="true"
            android:layout_gravity="right"
            android:nestedScrollingEnabled="false"
            android:onClick="onFinishClick" />
    </LinearLayout>

    </RelativeLayout>

但是我需要把屏幕分成两个面板。

面板 1 - TabHost 的完整区域

面板 2 - 固定高度且仅适用于线性。

请帮忙。

P.S。 Button 只是 Lineat 的一部分。请忽略它。

也许还很重要的一点是我用代码填充的选项卡面板。 每个选项卡都是一个 activity 布局。

我是这样做的:

// on eCreate..

        TabHost mTabHost = (TabHost) findViewById(R.id.tabHost);
        mTabHost.setup(getLocalActivityManager());
        try {
            mTabHost.addTab(mTabHost.newTabSpec("tab0").setIndicator("title1", null).setContent(new Intent(this, HelloScreen.class)));
            mTabHost.addTab(mTabHost.newTabSpec("tab1").setIndicator("title2", null).setContent(new Intent(this, BeginTest.class)));
            mTabHost.addTab(mTabHost.newTabSpec("tab2").setIndicator("title3", null).setContent(new Intent(this, Second.class)));
        } catch (Exception e) {
            throw e;
        }

然后我隐藏 TabWidget.. 并且这些选项卡(里面有活动)总是占据全屏..

也许我错了,但对我来说 Activity 就像 Windows 中的 Window.. 或 Winform.NET - 用户控件或 WinForm ..

In.NET 这样的结构非常完美..我不确定 Android 是如何管理活动的..

答案隐藏在正确的布局参数和正确的布局类型中。

您可以使用 Fragment 或 Activity(它们已被弃用,但我发现它们更容易实现,尤其是当您需要提供任何视图(按钮、canvas、文本等。 .. 就像管理 Activity 时所做的一切一样 "the groove tube"。 添加标签 - 使用我上面的代码..

但是图层..它们应该如下所示:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <TabHost
        android:id="@+id/tabHost"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:orientation="vertical">

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:orientation="vertical">

            <TabWidget
                android:id="@android:id/tabs"
                android:layout_width="match_parent"
                android:layout_height="wrap_content">
            </TabWidget>

        </RelativeLayout>
    </TabHost>

    <LinearLayout
        android:orientation="horizontal"
        android:layout_weight="1"
        android:background="@color/white"
        android:layout_height="60dp"
        android:layout_marginStart="0dp"
        android:layout_marginTop="0dp"
        android:layout_alignParentBottom="true"
        android:layout_width="fill_parent">

        <Button
            android:layout_width="100dp"
            android:layout_height="fill_parent"
            android:text="@string/your_text"
            android:id="@+id/yourId"
            android:layout_alignParentRight="true"
            android:layout_gravity="right"
            android:nestedScrollingEnabled="false"
            android:onClick="onYourClick" />
    </LinearLayout>
</LinearLayout>

要隐藏 TabHost TabWidget,请使用:

mTabHost.getTabWidget().getChildAt(0).setVisibility(View.GONE);

在您的主Activity eCreate..

然后..只需使用任何方法..通过按钮或代码显示所需的选项卡面板,使用 setCurrentTab(# of you Tab);

非常顺利的解决..