8

Android Design サポート ライブラリの TabLayout を使用しています。MODE_SCROLLABLE を GRAVITY_FILL と一緒に使用して、すべてのデバイスと方向で同じに見えるようにするにはどうすればよいですか?

現在、MODE_SCROLLABLE を使用すると、7 インチのタブレットでは見栄えがよくなりますが、10 インチのタブレットではタブが左に配置されます。すべてのサイズで GRAVITY_FILL を使用できるようにしたい。

これは私のタブレイアウトです:

<android.support.design.widget.TabLayout
    android:id="@+id/tab_layout"
    android:layout_width="match_parent"
    android:layout_height="72dp"            
/>

コードでモードを設定しています

 tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);
4

4 に答える 4

11

TabLayout.GRAVITY_FILL ドキュメントごと:

重力を使用しTabLayoutて、可能な限り埋めます。このオプションは、MODE_FIXEDとともに使用した場合にのみ有効です。

したがって、モードを MODE_SCROLLABLE に設定すると、タブは常に開始端から整列されます。MODE_SCROLLABLE のタブレットと携帯電話の唯一の違いは、タブの材料設計仕様で設定されているタブの最小幅です。

ビューを常にスクロール可能に設定する場合は、XML を介して重力とタブ モードの両方を指定できることに注意してください。

<android.support.design.widget.TabLayout
  android:id="@+id/tab_layout"
  android:layout_width="match_parent"
  android:layout_height="72dp"
  app:tabMode="scrollable"
/>
于 2015-07-08T23:10:55.993 に答える
3

Jayesh と非常によく似たソリューションを使用しましたが、タブの最小幅を使用し、それに基づいて使用するモードを計算します。このように、タブの許容可能な最小サイズを知るだけで済みます。それらすべてが余裕を持って収まる場合は、すべてのスペースを埋めるためにそれらを引き伸ばします。多すぎる場合は、それらを最小幅にしてスクロール可能に切り替えます。

 DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
        float dpWidth = displayMetrics.widthPixels / displayMetrics.density;
        //For some reason, setting minWidth in xml and then accessing it here doesn't work, returns 0
        int minWidth = 80;
        tabLayout.setMinimumWidth(minWidth);

        //If there are less tabs than needed to necessitate scrolling, set to fixed/fill
        if(tabLayout.getTabCount() < dpWidth/minWidth){
            tabLayout.setTabMode(TabLayout.MODE_FIXED);
            tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
        }else{
            //Otherwise, set to scrollable
            tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);

        }

xmlでは、タブレイアウトにはこれらのプロパティがあります

<android.support.design.widget.TabLayout
    android:id="@+id/sliding_tabs"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:tabMaxWidth="0dp"
    />
于 2016-05-14T02:23:10.770 に答える
0

私は同じ問題に遭遇しました。

私の意見では、問題を解決するための簡単な解決策はありません。FIX_MODE では、タブレイアウトのすべてのタブは、最大項目に基づいて同じ幅になります。

SCROLL_MODE では、すべてのタブに独自の幅があります。

そのため、ソリューションは少し複雑になっています。

私は2つの解決策を考えました。最初の解決策は、各タブ項目のテキストに空白を与えて、すべての項目が同じ幅になり、同時に画面いっぱいになるようにすることです。他の解決策は、この記事

で 述べたように、タブレイアウトでカスタムビューを使用することです。その後、アイテムの幅を手動で設定できます。

于 2015-07-17T09:02:20.633 に答える