Android:BOTTOM上的标签

时间:2010-03-07 08:40:43

标签: android tabwidget

我已经看到一些关于这个的喋喋不休,但没有什么明确的。 有没有办法将TabWidget中的标签放到屏幕底部? 如果是这样,怎么样?

我尝试了以下内容,但没有奏效:

a)将tabwidget设置在framelayout下面 b)将tabwidget的引力设置为“bottom”

谢谢! llappall

11 个答案:

答案 0 :(得分:272)

这是最简单,最强大,可扩展的解决方案,可以在屏幕底部显示标签。

  1. 在垂直LinearLayout中,将FrameLayout放在TabWidget
  2. 上方
  3. 在FrameLayout和TabWidget
  4. 上将layout_height设置为wrap_content
  5. 设置FrameLayout的android:layout_weight="1"
  6. 设置TabWidget的android:layout_weight="0"(默认为0,但强调,可读性等)
  7. 设置TabWidget的android:layout_marginBottom="-4dp"(删除底部分隔符)
  8. 完整代码:

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

答案 1 :(得分:38)

试试吧;) 只是看一下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>

答案 2 :(得分:12)

有一种方法可以删除该行。

1)遵循本教程:     android-tabs-with-fragments

2)然后应用Leaudro建议的RelativeLayout更改(将布局道具应用于所有FrameLayouts)。

您还可以将ImageView添加到第1项中的tab.xml,并获得类似于iPhone的标签。

这是我正在进行的工作的屏幕截图。我还有一些工作要做,主要是为图标做一个选择器,并确保相等的水平分布,但你明白了。 在我的情况下,我正在使用片段,但相同的主体应该应用于标准选项卡视图。

enter image description here

答案 3 :(得分:3)

对于那些尝试删除tabWidget的分隔行的人来说,这是一个示例项目(及其相应的教程),非常适合自定义选项卡,从而在选项卡位于底部时消除问题。 Eclipse项目:android-custom-tabs; 原始解释:blog; 希望这有帮助。

答案 4 :(得分:3)

不确定它是否适用于所有Android版本(特别是那些具有自定义UI功能的版本),但我可以通过添加

删除底部的灰色栏
 android:layout_marginBottom="-3dp"

到TabWidget XML ...

答案 5 :(得分:3)

有两种方法可以在标签活动的底部显示标签。

  1. 使用相对布局
  2. 使用Layout_weight属性
  3. 请查看link for more details

答案 6 :(得分:3)

<?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:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" >

        <FrameLayout
            android:id="@android:id/tabcontent"
            android:layout_width="fill_parent"
            android:layout_height="0dip"
            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:background="#252a31"
            android:tabStripEnabled="false" >
        </TabWidget>
    </LinearLayout>

</TabHost>

答案 7 :(得分:1)

这可能不是您正在寻找的(这不是将您的标签发送到屏幕底部的“简单”解决方案),但仍然是一个有趣的替代解决方案,我想向您举报:

ScrollableTabHost的行为与TabHost类似,但附加滚动视图以适应更多项目......

也许深入研究这个开源项目,你会找到问题的答案。如果我看到更容易,我会回复你。

答案 8 :(得分:1)

是的,请参阅:link,但他使用xml布局,而不是活动来创建新标签,所以把他的xml代码(设置paddingTop用于FrameLayout - 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);      


}

}

答案 9 :(得分:1)

当我尝试将它们放在屏幕底部时,我遇到了与android标签相同的问题。我的方案是不使用布局文件并在代码中创建选项卡,我也希望从每个选项卡中激活使用其他方法看起来有点过于复杂的活动,所以,这里是解决问题的示例代码:

adding-tabs-in-android-and-placing-them

答案 10 :(得分:0)

我建议使用此代码进行稳定工作,优化选项卡中的嵌套片段(例如嵌套的MapFragment)并在“不要保留活动”上进行测试:https://stackoverflow.com/a/23150258/2765497