我看到一些关于这个的喋喋不休,但没有确定的。有没有办法将 TabWidget 中的选项卡放在屏幕底部?如果是这样,怎么做?
我尝试了以下方法,但没有奏效:
a) 将 tabwidget 设置在 framelayout 下方
b) 将 tabwidget 的重力设置为“bottom”
谢谢!拉帕尔
这是在屏幕底部获取选项卡的最简单、最强大且可扩展的解决方案。
layout_height
为wrap_content
android:layout_weight="1"
android:layout_weight="0"
(默认为 0,但为了强调、可读性等)android:layout_marginBottom="-4dp"
(移除底部分隔线)完整代码:
<?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:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="5dp">
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="5dp"
android:layout_weight="1"/>
<TabWidget
android:id="@android:id/tabs"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="0"
android:layout_marginBottom="-4dp"/>
</LinearLayout>
</TabHost>
试试看 ;) 只看 FrameLayout(@id/tabcontent) 的内容,因为我不知道在滚动的情况下它会如何处理......在我的情况下它可以工作,因为我使用 ListView 作为我的选项卡的内容. :) 希望能帮助到你。
<?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">
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<FrameLayout android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_alignParentTop="true"
android:layout_above="@android:id/tabs" />
<TabWidget android:id="@android:id/tabs"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true" />
</RelativeLayout>
</TabHost>
有一种方法可以删除线。
1)按照本教程: android-tabs-with-fragments
2)然后应用Leaudro上面建议的RelativeLayout更改(将布局道具应用于所有FrameLayouts)。
您还可以将 ImageView 添加到第 1 项中的 tab.xml 并获得非常类似于 iPhone 的选项卡外观。
这是我现在正在处理的屏幕截图。我还有一些工作要做,主要是为图标做一个选择器并确保水平分布相等,但你明白了。就我而言,我使用的是片段,但相同的原则应该适用于标准选项卡视图。
对于所有试图删除 tabWidget 分隔线的人,这里有一个示例项目(及其各自的教程),它非常适合自定义选项卡,从而在选项卡位于底部时消除问题。Eclipse 项目:android-custom-tabs;原文解释:博客;希望这有帮助。
不确定它是否适用于所有版本的 Android(尤其是那些具有自定义 UI 内容的版本),但我能够通过添加删除底部的灰色条
android:layout_marginBottom="-3dp"
到 TabWidget XML...
尝试将它们放在屏幕底部时,我遇到了与 android 选项卡相同的问题。我的场景是不使用布局文件并在代码中创建选项卡,我还希望从每个选项卡中触发活动,这使用其他方法似乎有点过于复杂,所以,这里是克服问题的示例代码:
这可能不是您正在寻找的(将您的选项卡发送到屏幕底部不是一个“简单”的解决方案),但仍然是一个有趣的替代解决方案,我想向您指出:
ScrollableTabHost旨在表现得像 TabHost,但有一个额外的滚动视图以适应更多项目......
也许深入研究这个开源项目,您会找到问题的答案。如果我看到任何更容易的事情,我会回到你身边。
是的,请参阅:链接,但他使用 xml 布局,而不是活动来创建新选项卡,所以把他的 xml 代码(为 FrameLayout 设置 paddingTop - 0px)然后编写代码:
public class SomeActivity extends ActivityGroup {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TabHost tab_host = (TabHost) findViewById(R.id.edit_item_tab_host);
tab_host.setup(this.getLocalActivityManager());
TabSpec ts1 = tab_host.newTabSpec("TAB_DATE");
ts1.setIndicator("tab1");
ts1.setContent(new Intent(this, Registration.class));
tab_host.addTab(ts1);
TabSpec ts2 = tab_host.newTabSpec("TAB_GEO");
ts2.setIndicator("tab2");
ts2.setContent(new Intent(this, Login.class));
tab_host.addTab(ts2);
TabSpec ts3 = tab_host.newTabSpec("TAB_TEXT");
ts3.setIndicator("tab3");
ts3.setContent(new Intent(this, Registration.class));
tab_host.addTab(ts3);
tab_host.setCurrentTab(0);
}
}
我建议将此代码用于稳定工作,它针对选项卡中的嵌套片段(例如嵌套 MapFragment)进行了优化,并在“不保留活动”上进行了测试:https ://stackoverflow.com/a/23150258/2765497