Дизайн точек в Viewpager с androidx - PullRequest
0 голосов
/ 19 апреля 2020

Применение решения по этой ссылке Android ViewPager с нижними точками Я обнаружил, что в androidx, с реализацией "com.google. android .material: material: 1.0.0" Я не могу настроить ширина точек, и я не могу отрегулировать поля между точками.

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
<!-- activity_screen_slide.xml -->
<androidx.viewpager.widget.ViewPager
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/pager"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

    <com.google.android.material.tabs.TabLayout
        android:id="@+id/viewPagerDots"
        app:tabIndicatorFullWidth="false"
        app:tabPaddingStart="16dp"
        app:tabPaddingEnd="16dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        app:tabBackground="@drawable/tab_dot_selector"
        app:tabGravity="center"
        app:tabIndicatorHeight="0dp" />
</RelativeLayout>

drawable / viewpager_dot_indicator_default. xml

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

    <solid
        android:color="@color/colorPrimary" />
</shape>

drawable / viewpager_dot_indicator_selected. xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">
    <size android:height="160dp"
        android:width="160dp"/>
  <solid
        android:color="@color/red" />
</shape>

Это то, что я хочу

это то, что у меня есть

1 Ответ

0 голосов
/ 19 апреля 2020

Если вы хотите, чтобы точки отображались на вашем ViewPager, я предлагаю вам использовать этот код. Он даст вам идеальные точки по вашему выбору.

Сначала создайте линейный макет для точек и установите его ориентацию по горизонтали.

Затем в файле Java объявите массив textview

TextView[] setDots;

Теперь добавьте следующий фрагмент кода.

private void addDots(int position){

    setDots = new TextView[3]; // No. of dots. Here you'll get three dots.
    dots.removeAllViews();

    for (int i = 0; i<setDots.length; i++){
        setDots[i] = new TextView(this);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            setDots[i].setText(HtmlCompat.fromHtml("&#8226;", HtmlCompat.FROM_HTML_MODE_LEGACY));
        }
        setDots[i].setTextSize(35); //Dots size.

        dots.addView(setDots[i]);
    }

    if (setDots.length > 0){
        setDots[position].setTextColor(getResources().getColor(R.color.colorPrimaryDark, getTheme())); //Change the color as your need.
    }
}

Затем внутри ViewPager.OnPageChangedListener добавьте точки.

 @Override
 public void onPageSelected(int position) {
            addDots(position);
 }
...