温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Android中怎么利用RadioGroup实现底部导航栏

发布时间:2021-06-28 15:56:45 来源:亿速云 阅读:240 作者:Leah 栏目:移动开发

Android中怎么利用RadioGroup实现底部导航栏,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

布局:

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"                 android:layout_width="match_parent"                 android:layout_height="match_parent"                 android:orientation="vertical">      <include layout="@layout/fragment_content"/>      <View         android:layout_width="match_parent"         android:layout_height="1px"         android:background="@color/grey_300"         android:elevation="20dp"/>      <RadioGroup         android:id="@+id/radio_group"         android:layout_width="match_parent"         android:layout_height="56dp"         android:layout_alignParentBottom="true"         android:background="@color/white"         android:orientation="horizontal">          <RadioButton             android:id="@+id/rb_home"             style="@style/radiobutton_style"             android:checked="true"             android:drawableTop="@drawable/radiobutton_bg_home"             android:text="@string/item_home"             />          <RadioButton             android:id="@+id/rb_location"             style="@style/radiobutton_style"             android:drawableTop="@drawable/radiobutton_bg_location"             android:text="@string/item_location"/>          <RadioButton             android:id="@+id/rb_like"             style="@style/radiobutton_style"             android:drawableTop="@drawable/radiobutton_bg_like"             android:text="@string/item_like"/>          <RadioButton             android:id="@+id/rb_me"             style="@style/radiobutton_style"             android:drawableTop="@drawable/radiobutton_bg_me"             android:text="@string/item_person"/>      </RadioGroup> </RelativeLayout>

这里的drawableTop使用了状态选择器

<selector xmlns:android="http://schemas.android.com/apk/res/android">     <item android:drawable="@drawable/home_fill" android:state_checked="true"/>     <item android:drawable="@drawable/home"/> </selector>

style

<style name="radiobutton_style">         <item name="android:layout_width">0dp</item>         <item name="android:padding">3dp</item>         <item name="android:layout_height">match_parent</item>         <item name="android:layout_weight">1</item>         <item name="android:button">@null</item><!--去除RadioButton默认带的圆点-->         <item name="android:gravity">center</item>         <item name="android:textSize">12sp</item>     </style>

代码

初始化的代码就不记录了,都是一些findViewById,实现过程无非就是对RadioButton进行监听一下:

mRadioGroup.setOnCheckedChangeListener(this);       @Override     public void onCheckedChanged(RadioGroup group, int checkId) {         FragmentTransaction transaction = getFragmentManager().beginTransaction();         switch (checkId) {             case R.id.rb_home:                 if (mHomeFragment == null) {                     mHomeFragment = HomeFragment.newInstance(getString(R.string.item_home));                 }                 transaction.replace(R.id.sub_content, mHomeFragment);                 break;             case R.id.rb_location:                 if (mLocationFragment == null) {                     mLocationFragment = LocationFragment.newInstance(getString(R.string.item_location));                 }                 transaction.replace(R.id.sub_content, mLocationFragment);                 break;             case R.id.rb_like:                 if (mLikeFragment == null) {                     mLikeFragment = LikeFragment.newInstance(getString(R.string.item_like));                 }                 transaction.replace(R.id.sub_content, mLikeFragment);                 break;             case R.id.rb_me:                 if (mPersonFragment == null) {                     mPersonFragment = PersonFragment.newInstance(getString(R.string.item_person));                 }                 transaction.replace(R.id.sub_content, mPersonFragment);                 break;         }         setTabState();//设置状态         transaction.commit();     }

状态的设置

private void setTabState() {         setHomeState();         setLocationState();         setLikeState();         setMeState();      }      /**      * set tab home state      */     private void setHomeState() {         if (mRadioHome.isChecked()) {             mRadioHome.setTextColor(ContextCompat.getColor(getActivity(), R.color.colorPrimary));         } else {             mRadioHome.setTextColor(ContextCompat.getColor(getActivity(), R.color.black));         }     }      private void setLocationState() {         if (mRadioLocation.isChecked()) {             mRadioLocation.setTextColor(ContextCompat.getColor(getActivity(), R.color.colorPrimary));         } else {             mRadioLocation.setTextColor(ContextCompat.getColor(getActivity(), R.color.black));         }     }      private void setLikeState() {         if (mRadioLike.isChecked()) {             mRadioLike.setTextColor(ContextCompat.getColor(getActivity(), R.color.colorPrimary));         } else {             mRadioLike.setTextColor(ContextCompat.getColor(getActivity(), R.color.black));         }     }      private void setMeState() {         if (mRadioMe.isChecked()) {             mRadioMe.setTextColor(ContextCompat.getColor(getActivity(), R.color.colorPrimary));         } else {             mRadioMe.setTextColor(ContextCompat.getColor(getActivity(), R.color.black));         }     }

这里需要注意的是, setDefaultFragment();我写在onCreateVew里面并没有生效。这里我写在了onStart()方法里了。

@Override    public void onStart() {        setDefaultFragment();//写在onCreateView里面,当页面跑到其他Fragment再回来就不会生效        super.onStart();    }

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI