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

时间:2017-09-10 14:20:40

标签: android android-linearlayout android-tabhost android-relativelayout

我想获得图片上显示的布局结构。 无论我做了什么,它总是让TabHost在线性上传播到全屏。

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

<?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的一部分。请不要理会。

enter image description here

也许提及我从代码中填充的选项卡面板也很重要。 每个标签都是一个活动布局。

我这样做:

// 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中的窗口......或者Winform.NET - 用户控件或WinForm ......

在.NET中,这种结构非常完美。我不确定Android如何管理活动..

1 个答案:

答案 0 :(得分:0)

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

你可以使用片段或活动(它们已被弃用,但我发现它们更容易实现,特别是如果你需要提供任何视图(按钮,画布,文本等等)..只需做好每一件事。槽管&#34;就像管理活动时一样。 添加标签 - 使用上面的代码..

但是层数......它们应该如下:

<?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);

在您的MainActivity eCreate上..

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

非常顺利的解决方案......