如何使 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);
非常顺利的解决..
我想得到如图所示的布局结构。 无论我尝试什么,它总是让 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);
非常顺利的解决..