• 参考:
    五种方式实现Android底部导航栏
    Android底部导航栏实现(二)之RadioGroup

一. 简介

1.1 原理

  就是用RadioButton实现一组导航栏的布局,然后处理点击事件,动态替换Fragment

1.2 用到东西

  • RadioButton
  • StateListDrawable

1.3 注意事项

  • 图片不能太大,太大会导致效果不好,如图
Android底部导航栏之RadioButton_第1张图片 图标太大的导航栏

二. 实现

  • 编写布局
  • activity_main.xml
<?xml version="1.0" encoding="utf-8"?>                                                    

其中用到的drawableTop为StateListDrawable

<?xml version="1.0" encoding="utf-8"?>        
  • content_main.xml
<?xml version="1.0" encoding="utf-8"?>    
  • 处理逻辑
  • MainActivity
package cn.foxnickel.radiobuttonnavigation;import android.os.Bundle;import android.support.v4.content.ContextCompat;import android.support.v7.app.AppCompatActivity;import android.widget.RadioButton;import android.widget.RadioGroup;import android.widget.Toast;    public class MainActivity extends AppCompatActivity implements RadioGroup.OnCheckedChangeListener{    RadioButton mHome,mLike,mLocation,mMe;    RadioGroup mRadioGroup;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initView();    }    private void initView(){        mHome = (RadioButton) findViewById(R.id.rb_home);        mLike = (RadioButton) findViewById(R.id.rb_like);        mLocation = (RadioButton) findViewById(R.id.rb_location);        mMe = (RadioButton) findViewById(R.id.rb_me);        mRadioGroup = (RadioGroup) findViewById(R.id.radio_group);        mRadioGroup.setOnCheckedChangeListener(this);    }    /*RadioGroup点击事件*/    @Override    public void onCheckedChanged(RadioGroup group, int checkedId) {        switch (checkedId) {            case R.id.rb_home:                // TODO: 2017/4/9 进行fragment的替换                Toast.makeText(MainActivity.this,"Home",Toast.LENGTH_SHORT).show();                break;            case R.id.rb_location:                // TODO: 2017/4/9 进行fragment的替换                Toast.makeText(MainActivity.this,"Location",Toast.LENGTH_SHORT).show();                break;            case R.id.rb_like:                // TODO: 2017/4/9 进行fragment的替换                Toast.makeText(MainActivity.this,"Like",Toast.LENGTH_SHORT).show();                break;            case R.id.rb_me:                // TODO: 2017/4/9 进行fragment的替换                Toast.makeText(MainActivity.this,"Me",Toast.LENGTH_SHORT).show();                break;        }        setTabState();//每次点击之后设置RadioButton的颜色状态    }    private void setTabState() {        setHomeState();        setLocationState();        setLikeState();        setMeState();    }    /*设置HomeRadioButton的状态*/    private void setHomeState() {        if (mHome.isChecked()) {            mHome.setTextColor(ContextCompat.getColor(this, R.color.colorPrimary));        } else {            mHome.setTextColor(ContextCompat.getColor(this, R.color.black));        }    }    /*设置LocationRadioButton的状态*/    private void setLocationState() {        if (mLocation.isChecked()) {            mLocation.setTextColor(ContextCompat.getColor(this, R.color.colorPrimary));        } else {            mLocation.setTextColor(ContextCompat.getColor(this, R.color.black));        }    }    /*设置LikeRadioButton的状态*/    private void setLikeState() {        if (mLike.isChecked()) {            mLike.setTextColor(ContextCompat.getColor(this, R.color.colorPrimary));        } else {            mLike.setTextColor(ContextCompat.getColor(this, R.color.black));        }    }    /*设置MeRadioButton的状态*/    private void setMeState() {        if (mMe.isChecked()) {            mMe.setTextColor(ContextCompat.getColor(this, R.color.colorPrimary));        } else {            mMe.setTextColor(ContextCompat.getColor(this, R.color.black));        }    }}

具体替换fragment逻辑就不再写了,参见Android底部导航栏之BottomNavigationBar

更多相关文章

  1. Android顶部菜单栏,返回按钮、标题布局、右上角菜单
  2. Android控件笔记——多状态按钮ToggleButton
  3. 快速使用Android BaseRecyclerViewAdapterHelper之实现一种&多种
  4. Android 沉浸式状态栏,别搞那么麻烦
  5. 关于含有RecyclerView的布局载入时,会滚动到底部问题
  6. Android从右到左的布局(RTL Layout)
  7. android ui 布局
  8. Android的布局优化

随机推荐

  1. 告别Dagger2模板代码:DaggerAndroid使用详
  2. Android display架构分析(二)
  3. Android Studio导入Eclipse项目
  4. android音频口通信——2FSK信号调制
  5. Android --- libgdx android 学习初步(环
  6. android 调试堆栈整理
  7. Android(安卓)Fragment完全解析,关于碎片
  8. Android:倍数提高工作效率的 Android Stu
  9. Android SDK Manager更新报错——Downloa
  10. android开发之权限问题整理