常用RadioGroup+Fragment点击切换,RadioButton图标设置自己想要的位置及大小

来源:互联网 发布:linux echo命令颜色 编辑:程序博客网 时间:2024/06/05 23:44
1.定义Fragment基类import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v4.app.Fragment;import android.support.v4.app.FragmentActivity;import android.support.v4.app.FragmentTransaction;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import butterknife.ButterKnife;import butterknife.Unbinder;/** * Created by Json on 2017/9/23. */public  abstract class BaseFragment extends Fragment implements View.OnClickListener{    private static final String STATE_SAVE_IS_HIDDEN = "STATE_SAVE_IS_HIDDEN";    public  FragmentActivity mActivity;    private Unbinder bind;    @Override    public void onCreate(@Nullable Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        mActivity = getActivity();    }    @Nullable    @Override    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {        View rootView = inflater.inflate(getLayoutId(), container, false);        bind = ButterKnife.bind(this, rootView);        if (savedInstanceState!=null){            boolean isSupportHidden=savedInstanceState.getBoolean(STATE_SAVE_IS_HIDDEN);            FragmentTransaction ft=getFragmentManager().beginTransaction();            if (isSupportHidden){                ft.hide(this);            }else {                ft.show(this);            }            ft.commit();        }        return rootView;    }    @Override    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {        initView();        initData();        initListener();        super.onViewCreated(view, savedInstanceState);    }    @Override    public void onSaveInstanceState(Bundle outState) {        outState.putBoolean(STATE_SAVE_IS_HIDDEN,isHidden());        super.onSaveInstanceState(outState);    }    @Override    public void onDestroyView() {        super.onDestroyView();        bind.unbind();    }    protected abstract void initView();    protected abstract void initData();    protected abstract void initListener();    public  abstract int getLayoutId() ;}2.根据需求几个Fragment继承基类如:
import android.view.View;import com.huashan.handanbank.R;import com.huashan.handanbank.baseObject.BaseFragment;/** * Created by Json on 2017/9/23. */public class LifeFragment extends BaseFragment {    @Override    protected void initView() {    }    @Override    protected void initData() {    }    @Override    protected void initListener() {    }    @Override    public int getLayoutId() {        return R.layout.activity_main;    }    @Override    public void onClick(View view) {    }}
3.主界面使用FragmentTransaction显示或者隐藏Fragment
public class MainActivity extends FragmentActivity implements RadioGroup.OnCheckedChangeListener{    @BindView(R.id.rb_header)    RadioButton rbHeader;    @BindView(R.id.rb_finance)    RadioButton rbFinance;    @BindView(R.id.rb_life)    RadioButton rbLife;    @BindView(R.id.rb_mine)    RadioButton rbMine;    @BindView(R.id.rg_footer)    RadioGroup rgFooter;    private FragmentTransaction transaction;    private HeaderFragment headerFragment;    private FinanceFragment financeFragment;    private LifeFragment lifeFragment;    private MineFragment mineFragment;    @Override    protected void onCreate(@Nullable Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        ButterKnife.bind(this);        initView();        initData();    }    public void initData() {        rgFooter.setOnCheckedChangeListener(this);        rgFooter.check(R.id.rb_header);    }    public void initView() {        //初始化底部四个RadioButton图片        initFooterButtons();    }    private void initFooterButtons() {        //设置图片在上部 并且使用代码实现图片的大小,在布局中设置图片大小位置不理想        //参数指的是图片在RadioButton的位置,分别为 左 上 右 下       rbHeader.setCompoundDrawables(null, getRadioButtonDrawable(R.drawable.footer_header_button_select), null, null);        rbLife.setCompoundDrawables(null, getRadioButtonDrawable(R.drawable.footer_life_button_select), null, null);        rbFinance.setCompoundDrawables(null, getRadioButtonDrawable(R.drawable.footer_finance_button_select), null, null);        rbMine.setCompoundDrawables(null, getRadioButtonDrawable(R.drawable.footer_mine_button_select), null, null);    }    /**     * @param drawableId     * @return 为图片设置参数 左右距离,上下距离,宽,高     */    public Drawable getRadioButtonDrawable(int drawableId) {        float density = getResources().getDisplayMetrics().density;        int with = (int) (density * 32);        Drawable img_mine = getResources().getDrawable(drawableId);        img_mine.setBounds(0, 0, with, with);        return img_mine;    }    @Override    public void onCheckedChanged(RadioGroup radioGroup, @IdRes int i) {        FragmentManager fragmentManager = getSupportFragmentManager();        transaction = fragmentManager.beginTransaction();        hideAllFragment(transaction);        switch (i){            case R.id.rb_header:                if (headerFragment==null){                    headerFragment = new HeaderFragment();                    transaction.add(R.id.content,headerFragment);                }else {                    transaction.show(headerFragment);                }                break;            case R.id.rb_finance:                if (financeFragment==null){                    financeFragment = new FinanceFragment();                    transaction.add(R.id.content,financeFragment);                }else {                    transaction.show(financeFragment);                }                break;            case R.id.rb_life:                if (lifeFragment==null){                    lifeFragment = new LifeFragment();                    transaction.add(R.id.content,lifeFragment);                }else {                    transaction.show(lifeFragment);                }                break;            case R.id.rb_mine:                if (mineFragment==null){                    mineFragment = new MineFragment();                    transaction.add(R.id.content,mineFragment);                }else {                    transaction.show(mineFragment);                }                break;        }        transaction.commit();    }    private void hideAllFragment(FragmentTransaction transaction) {        if (headerFragment!=null) this.transaction.hide(headerFragment);        if (financeFragment!=null) this.transaction.hide(financeFragment);        if (lifeFragment!=null) this.transaction.hide(lifeFragment);        if (mineFragment!=null) this.transaction.hide(mineFragment);    }}
4.布局
<?xml version="1.0" encoding="utf-8"?><LinearLayout 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:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"><FrameLayout    android:id="@+id/content"    android:layout_width="match_parent"    android:layout_height="0dp"    android:layout_weight="1"></FrameLayout><RadioGroup    android:layout_width="match_parent"    android:layout_height="50dp"    android:orientation="horizontal"    android:layout_marginBottom="5dp"    android:id="@+id/rg_footer"   >    <RadioButton        android:id="@+id/rb_header"        android:text="首页"        style="@style/footer_radioButton_style" />    <RadioButton        android:id="@+id/rb_finance"        android:text="金融"        style="@style/footer_radioButton_style" />    <RadioButton        android:id="@+id/rb_life"        android:text="生活"        style="@style/footer_radioButton_style" />    <RadioButton        android:id="@+id/rb_mine"        android:text="我的"        style="@style/footer_radioButton_style"       /></RadioGroup></LinearLayout>
5.style属性

<style name="footer_radioButton_style">    <item name="android:gravity">center</item>    <item name="android:layout_width">0dp</item>    <item name="android:layout_height">50dp</item>    <item name="android:layout_weight">1</item>    <item name="android:text">14sp</item>    <item name="android:textColor">@drawable/footer_textcolor_select</item>    <item name="android:button">@null</item></style>




阅读全文
0 0
原创粉丝点击