1. ホーム
  2. android

[解決済み] AndroidのView Pagerでドット表示機能を作るには?

2022-04-21 05:01:05

質問

おそらく多くの人が(私と同じように)、このような問題を解決するために ViewPager のように、下のドットがあるものです。 <イグ

このようなAndroidのViewPagerはどのように作成するのでしょうか?

どのように解決するのですか?

必要なのは ビューページャー , タブレイアウト と、選択されたドットとデフォルトのドットのための2つのdrawable。

まず最初に TabLayout を画面レイアウトに追加し、それを ViewPager . これには2つの方法があります。


ネストされた TabLayoutViewPager

<androidx.viewpager.widget.ViewPager
    android:id="@+id/photos_viewpager"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.google.android.material.tabs.TabLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
</androidx.viewpager.widget.ViewPager>

この場合 TabLayout と自動的に接続されます。 ViewPager しかし TabLayout の次に来るのは ViewPager その上ではなく、その上に。


セパレート TabLayout

<androidx.viewpager.widget.ViewPager
    android:id="@+id/photos_viewpager"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

<com.google.android.material.tabs.TabLayout
    android:id="@+id/tab_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>

この場合は TabLayout どこでもいいんです、でも、つながなきゃ TabLayout をもって ViewPager プログラム的に

ViewPager pager = (ViewPager) view.findViewById(R.id.photos_viewpager);
PagerAdapter adapter = new PhotosAdapter(getChildFragmentManager(), photosUrl);
pager.setAdapter(adapter);

TabLayout tabLayout = (TabLayout) view.findViewById(R.id.tab_layout);
tabLayout.setupWithViewPager(pager, true);

レイアウトを作成したら、次はドットを用意します。そこで、3つのファイルを作成します。 selected_dot.xml , default_dot.xmltab_selector.xml .


selected_dot.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape
            android:innerRadius="0dp"
            android:shape="ring"
            android:thickness="8dp"
            android:useLevel="false">
            <solid android:color="@color/colorAccent"/>
        </shape>    
    </item>
</layer-list>


default_dot.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape
            android:innerRadius="0dp"
            android:shape="ring"
            android:thickness="8dp"
            android:useLevel="false">
            <solid android:color="@android:color/darker_gray"/>
        </shape>    
    </item>
</layer-list>


tab_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/selected_dot"
          android:state_selected="true"/>

    <item android:drawable="@drawable/default_dot"/>
</selector>


に3行だけコードを追加する必要があります。 TabLayout をXMLレイアウトで作成します。

app:tabBackground="@drawable/tab_selector"
app:tabGravity="center"
app:tabIndicatorHeight="0dp"