web-dev-qa-db-ja.com

TabLayoutの異なるtabMode

ViewPagerとTabLayoutを使用しています。タブをディスプレイtabModeに配置できる場合は、次のようにする必要があります。

app:tabMode="fixed"

else

app:tabMode="scrollable"

これどうやってするの?

8
Tiberal

質問はありませんが、タブ数が静的または固定(タブの数がわかっている)の場合は、app:tabMode="fixed"タブ数が動的(フィードからのデータ)の場合、app:tabMode="scrollable"

3

Xmlレイアウトで、私は宣言しました

修繕

そしてフラグメントJavaクラスで、私はこれを作りました:

    if (tabLayout == null) {
        tabLayout = (TabLayout) view.findViewById(R.id.tabs);

        DisplayMetrics metrics = new DisplayMetrics();
        WindowManager wm = (WindowManager) view.getContext().getSystemService(Context.WINDOW_SERVICE);
        wm.getDefaultDisplay().getMetrics(metrics);

        int width = metrics.widthPixels;
        int height = metrics.heightPixels;
        double wi = (double) width / (double) metrics.xdpi;
        double hi = (double) height / (double) metrics.ydpi;
        double x = Math.pow(wi, 2);
        double y = Math.pow(hi, 2);
        double screenInches = Math.sqrt(x + y);

        if (screenInches < 4) {
            tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);
        }
    }
1
Sergio Rey

問題が特定の画面構成(小さな画面、縦向きの構成など)の場合、タブは画面に収まらないためスクロール可能である必要があり、他の画面構成/サイズの場合、タブの数は完全に収まります。画面では、リソース修飾子を使用して、画面の構成/サイズごとにタブを異なる方法で定義できます。

例として、タブが縦向きではなく横向きに収まると想像してください。したがって、タブを縦向きではscrollable、横向きではfixedにしたい場合があります。

res/layout/tabs.xmlには、ポートレートで使用するTablLayoutが含まれます。

<?xml version="1.0" encoding="utf-8"?>
<Android.support.design.widget.TabLayout xmlns:app="http://schemas.Android.com/apk/res-auto"
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:id="@+id/tabs"
    app:tabMode="scrollable"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content" />

およびres/layout-land/tabs.xmlには、ランドスケープで使用されるTabLayoutが含まれます。

<?xml version="1.0" encoding="utf-8"?>
<Android.support.design.widget.TabLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:id="@+id/tabs"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content" />

次に、タブを含むレイアウトに、次のように含めます。

<include layout="@layout/tabs" />

これがあなたが探しているものであることを願っています。

1
Aitor Viana

TabLayoutで使用できるtabModeは2つあります。

app:tabMode="fixed"
app:tabMode="scrollable"

プログラム的には

 tabLayout.setTabMode(TabLayout. MODE_FIXED);
tabLayout.setTabMode(TabLayout. MODE_SCROLLABLE);

上記はMODE_SCROLLABLEについても同じです

tabLayoutモードを理解するには、以下のリンクを参照してください https://developer.Android.com/reference/Android/support/design/widget/TabLayout

1
Yashoda Bane

質問はありませんでしたが、Androidドキュメント

app:tabMode = "fixed"またはapp:tabMode = "scrollable"を使用する必要がある場合

  1. tabMode = "fixed"固定タブはすべてのタブを同時に表示し、タブ間のクイックピボットの恩恵を受けるコンテンツで最適に使用されます。

  2. app:tabMode = "scrollable"スクロール可能なタブは、任意の時点でタブのサブセットを表示し、より長いタブラベルとより多くのタブを含めることができます。ユーザーがタブラベルを直接比較する必要がない場合に、タッチインターフェイスでコンテキストを参照するのに最適です。このモードは通常、ViewPagerで使用されます。

0
Sunil Patel