android - 如何更改 viewpager 中每个 fragment 的点指示器( Activity 和非 Activity )的颜色?

标签 android xml android-studio kotlin android-viewpager

A picture of what I'm trying to achieve

我已经使用 XML 设置了点指示器的 Activity 和非 Activity 状态的颜色。但是,我对如何如图所示更改每个屏幕的 Activity 和非 Activity 状态的颜色感到非常困惑。 我已经使用 fragments 和 viewpager 创建了布局,并且添加了一个 tablayout。

MainActivity.kt

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val adapter = MyViewPagerAdapter(supportFragmentManager)
        adapter.addFragment(TakeFragment())
        adapter.addFragment(UploadFragment())
        adapter.addFragment(PaidFragment())
        viewPager.adapter = adapter
        tab_layout.setupWithViewPager(viewPager)

    }

    class MyViewPagerAdapter(fragmentManager: FragmentManager) : FragmentPagerAdapter(fragmentManager){

        val fragmentList : MutableList<Fragment> = ArrayList()

        override fun getItem(position: Int): Fragment {
            return fragmentList[position]
        }

        override fun getCount(): Int {
            return fragmentList.size
        }

        fun addFragment(fragment: Fragment){
            fragmentList.add(fragment)
        }
    }
}

activity_main.xml

    <FrameLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/frag_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">

    <androidx.viewpager.widget.ViewPager
        android:id="@+id/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"
            android:background="#00000000"
            app:tabBackground="@drawable/tab_selector"
            app:tabGravity="center"
            app:tabIndicatorHeight="0dp" />

    </androidx.viewpager.widget.ViewPager>

</FrameLayout>

tab_selector.xml

<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>

selected_dot.xml

<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="#8EBFE8"/>
        </shape>
    </item>
</layer-list>

default_dot.xml

<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="#AAD6F9"/>
        </shape>
    </item>
</layer-list>

最佳答案

为简单起见,假设您已经实现了 ViewPager.OnPageChangeListener

@Override
    public void onPageSelected(int i) {
        Log.v(TAG, " ++++++++    onPageSelected:  " + i);
        mViewPager.setCurrentItem(i);

        //TODO You can use this position: to write other dependent logic
        if (i == 0) {
            System.out.println("0");
            mImv1.setBackgroundResource(R.drawable.activate_one);
            mImv2.setBackgroundResource(R.drawable.default_one);

        } else {
            System.out.println("1");
            mImv1.setBackgroundResource(R.drawable.default_one);
            mImv2.setBackgroundResource(R.drawable.activate_one);
        }

    }

关于android - 如何更改 viewpager 中每个 fragment 的点指示器( Activity 和非 Activity )的颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62948035/

相关文章:

android - 如何编写服务来跟踪 android 设备上的 gprs 数据使用情况

android - 此 IP、站点或移动应用程序无权使用此 API key 。从 IP 地址收到的请求

objective-c - 带有完成 block 的自定义 xml 解析器类

xml - 强制xslt生成 "xml"域名

android - 最近更新后,pug get 无法正常工作。有任何想法吗?

android - retrofit 拦截响应

android - Intent 过滤器无法打开自定义应用程序

android - 按钮未显示在 Android Studio 中

linux - 无法安装android studio包

android - 如何调试 Android Native 崩溃日志(可能是多个 webview 问题)?