web-dev-qa-db-ja.com

Android:下部のタブ

私はこれについていくらかおしゃべりをしましたが、明確なものはありません。画面の下部にTabWidgetのタブを配置する方法はありますか?もしそうなら、どのように?

私は次のことを試しましたが、うまくいきませんでした:

a)tablaydgetをframelayoutの下に設定する
b)タブウィジェットの重力を「下」に設定する

ありがとう!ラッパール

148
llappall

以下は、画面の下部にタブを表示するための、最もシンプルで堅牢でスケーラブルなソリューションです。

  1. 垂直LinearLayoutで、TabWidgetの上にFrameLayoutを配置します
  2. FrameLayoutとTabWidgetの両方でlayout_heightwrap_contentに設定します
  3. FrameLayoutのAndroid:layout_weight="1"を設定します
  4. TabWidgetのAndroid:layout_weight="0"を設定します(0がデフォルトですが、強調、読みやすさなどのため)
  5. TabWidgetの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>
272
stormin986

試してください;)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>
38
Leaudro

行を削除する方法があります。

1)このチュートリアルに従ってください: Android-tabs-with-fragments

2)次に、Leaudroが上記で提案したRelativeLayoutの変更を適用します(すべてのFrameLayoutsにレイアウトの小道具を適用します)。

また、アイテム#1のtab.xmlにImageViewを追加して、タブのようにiPhoneのような外観にすることもできます。

ここに私が今取り組んでいるもののスクリーンショットがあります。私はまだやるべき仕事があります。主にアイコンのセレクターを作成し、水平方向の均等な分布を確保しますが、アイデアは得られます。私の場合、フラグメントを使用していますが、同じプリンシパルが標準のタブビューに適用されるはずです。

enter image description here

12
Brill Pappin
<?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>
3

タブアクティビティの下部にタブを表示するには、2つの方法があります。

  1. 相対レイアウトを使用する
  2. Layout_weight属性を使用する

詳細についてはリンク を確認してください。

3
MduSenthil

TabWidgetの区切り線を削除しようとするすべての人のために、ここにサンプルプロジェクト(およびそれぞれのチュートリアル)があります。これらはタブをカスタマイズし、タブが最下部にある場合の問題を削除するのに最適です。 Eclipseプロジェクト: Android-custom-tabs ;元の説明: blog ;これが役に立てば幸いです。

3
Djumaka

Androidのすべてのバージョン(特にカスタムUIのもの)で機能するかどうかはわかりませんが、追加することで下部の灰色のバーを削除できました

 Android:layout_marginBottom="-3dp"

tabWidget XMLへ...

3
Justin

これはまさにあなたが探しているものではないかもしれません(画面の下部にタブを送信する「簡単な」ソリューションではありません)が、それでも私はあなたにフラグを立てたい興味深い代替ソリューションです:

ScrollableTabHost はTabHostのように動作するように設計されていますが、より多くの項目に合わせてスクロールビューが追加されています...

このオープンソースプロジェクトを掘り下げると、あなたの質問に対する答えが見つかるでしょう。もっと簡単なものがあれば、また戻ってきます。

1
Hubert

はい、参照してください: link 、しかし、彼は新しいタブを作成するためにアクティビティではなく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);      


}

}

1
Pavel

画面の下部に配置しようとすると、Androidタブで同じ問題が発生していました。私のシナリオは、レイアウトファイルを使用せずにコードでタブを作成することでした。また、他のアプローチを使用すると少し複雑すぎると思われる各タブからアクティビティを起動することも考えていました。

Androidにタブを追加して配置する

1
Zeeshan

安定した作業のためにこのコードを使用することをお勧めします。タブ内のネストされたフラグメント(ネストされたMapFragmentなど)に対して最適化され、「アクティビティを保持しない」でテストされます: https://stackoverflow.com/a/23150258/2765497

0
Flinbor