想到啥写啥第一期:致力于更简单易懂的代码解决我们安卓小白遇到的问题
接上一次的ViewPager,写一个监听器,使得点击界面下的按钮,可以切换到相应的界面
(夹杂res里面用shape自主设计一些简单的图样,圆啊,方啊什么的,然后用selector设置选中时候是什么shape,没选中是什么shape)
我用的是材料是 radioGroup以及它的监听,ViewPager的监听
上次基础上新增的UI:
<androidx.viewpager.widget.ViewPager
android:id="@+id/viewPage"
android:background="#0f0"
android:layout_width="match_parent"
android:layout_height="400sp"/>
<RadioGroup
android:id="@+id/radioGroup"
android:layout_width="match_parent"
android:orientation="horizontal"
android:gravity="center"
android:layout_height="50sp">
//这里的button:@null是把radioButton原来的样式删掉,太难看了
//background就是自己写的样式,我放在最先面,有兴趣可以参考
<RadioButton
android:id="@+id/rb1"
android:button="@null"
android:background="@drawable/bg"
android:layout_width="30sp"
android:layout_height="30sp"
android:layout_marginEnd="20sp"/>
<RadioButton
android:id="@+id/rb2"
android:button="@null"
android:background="@drawable/bg"
android:layout_width="30sp"
android:layout_height="30sp"
android:layout_marginStart="20sp"
android:layout_marginEnd="20sp"/>
<RadioButton
android:id="@+id/rb3"
android:button="@null"
android:background="@drawable/bg"
android:layout_width="30sp"
android:layout_height="30sp"
android:layout_marginStart="20sp"
android:layout_marginEnd="20sp"/>
</RadioGroup>
接下来就是radioGroup的定义和绑定,然后监听
(ps:建议一些监听事件放在onResume里面或者onStart里面,以后的编写 可能 遇到重新回到这个界面的时候监听失效的掉发情况)
(onCreate)
private RadioGroup radioGroup;
radioGroup = findViewById(R.id.radioGroup);
(onResume)
radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
switch (checkedId){
case R.id.rb1:
//顾名思义,ViewPager起始下标就是0
//比较相似的是radioButton在radioGroup里面不去设置id的情况下,默认id起始是1,也就是checkId(1)也是没事的
//知道就行,并不推荐使用嘿嘿
viewPager.setCurrentItem(0);
break;
case R.id.rb2:
viewPager.setCurrentItem(1);
break;
case R.id.rb3:
viewPager.setCurrentItem(2);
break;
}
}
});
radioGroup.check(R.id.rb1);
然后是ViewPager的监听
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
//页面滚动时触发(我也不知道,看这个单词瞎猜的)
}
@Override
public void onPageSelected(int position) {
//页面选择后触发,然后去选择相应的radioButton的id
switch (position){
case 0:
radioGroup.check(R.id.rb1);
break;
case 1:
radioGroup.check(R.id.rb2);
break;
case 2:
radioGroup.check(R.id.rb3);
break;
}
}
@Override
public void onPageScrollStateChanged(int state) {
//页面滚动状态改变时触发(我也不知道,看这个单词瞎猜的)
}
});
PS:shape + selector的超简单的使用
(这些文件都是在res文件夹上面右键new 一个Android Resource File,新建界面里面会有这些文件的选择,不要在drawable上面右击!!!)
bg1: (shape)
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid
//这个整体是什么颜色
android:color="#fff"/>
<size
//大小
android:width="10sp"
android:height="10sp"/>
<stroke
//边框线
android:width="1sp"/>
</shape>
bg2:(shape)
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid
android:color="#c0c0c0"/>
<size
android:width="10sp"
android:height="10sp"/>
<stroke
android:width="1sp"/>
</shape>
bg:(selector)
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
//state里面有许多状态的选择,可以自行查找使用
<item android:state_checked="true"
android:drawable="@drawable/bg2"/>
<item android:state_checked="false"
android:drawable="@drawable/bg1"/>
</selector>