使用RadioGroup实现底部导航栏

来源:互联网 发布:ubuntu 设置用户目录 编辑:程序博客网 时间:2024/06/04 18:34

效果如图:

实现可最基本的导航栏功能,不能左右滑动,只能点击
1.内嵌的fragment的布局:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical" android:layout_width="match_parent"    android:layout_height="match_parent">    <TextView        android:layout_width="match_parent"        android:layout_height="match_parent"        android:gravity="center"        android:textSize="50sp"        android:textColor="@color/colorPrimary"        android:text="home"/></LinearLayout>

2.fragment的activity代码:

public class FrHome extends Fragment {    @Nullable    @Override    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {        View view = LayoutInflater.from(getContext()).inflate(R.layout.fragment_home, container, false);        return view;    }}

以此为例根据需要编写不同的fragment布局等等。

3.装载fragment的界面布局如下(其中使用了selector进行实现点击改变图标和文字颜色):

点击改变文字颜色:

<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android">    <item android:state_checked="true" android:color="#3F51B5"/>    <item android:state_checked="false" android:color="#8f8f8f"/></selector>

点击改变图标:

<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android">    <item android:state_checked="true" android:drawable="@mipmap/ic_history_checked"/>    <item android:state_checked="false" android:drawable="@mipmap/ic_history_unchecked"/></selector>

界面布局:

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    xmlns:app="http://schemas.android.com/apk/res-auto"    tools:context="com.lotus.chartspagedemo.ActHome">    <FrameLayout        android:id="@+id/frame_layout"        android:layout_width="match_parent"        android:layout_above="@+id/card_view"        android:layout_height="match_parent"/>    <android.support.v7.widget.CardView        android:id="@+id/card_view"        app:cardElevation="25dp"        android:layout_alignParentBottom="true"        android:layout_width="match_parent"        android:layout_height="wrap_content">        <RadioGroup            android:paddingTop="5dp"            android:id="@+id/tab_bar"            android:background="@color/app_white"            android:layout_width="match_parent"            android:layout_height="60dp"            android:gravity="center"            android:orientation="horizontal">            <RadioButton                android:id="@+id/tab_home"                android:gravity="center"                android:button="@null"                android:drawableTop="@drawable/selector_tab_home"                android:layout_width="0dp"                android:layout_weight="1"                android:layout_height="match_parent"                android:textColor="@drawable/selector_tab_color"                android:text="首页"/>            <RadioButton                android:id="@+id/tab_health"                android:gravity="center"                android:button="@null"                android:drawableTop="@drawable/selector_tab_health"                android:layout_width="0dp"                android:layout_weight="1"                android:layout_height="match_parent"                android:textColor="@drawable/selector_tab_color"                android:text="体检测评" />            <RadioButton                android:id="@+id/tab_personal"                android:gravity="center"                android:button="@null"                android:drawableTop="@drawable/selector_tab_personal"                android:layout_width="0dp"                android:layout_weight="1"                android:layout_height="match_parent"                android:textColor="@drawable/selector_tab_color"                android:text="个人中心"                />        </RadioGroup>    </android.support.v7.widget.CardView></RelativeLayout>

4.装载fragment的界面的activity代码(加入双击返回键则退出应用):

public class ActHome extends FragmentActivity implements RadioGroup.OnCheckedChangeListener {    @BindView(R.id.frame_layout)    FrameLayout frameLayout;    @BindView(R.id.tab_home)    RadioButton tabHome;    @BindView(R.id.tab_health)    RadioButton tabHealth;    @BindView(R.id.tab_personal)    RadioButton tabPersonal;    @BindView(R.id.tab_bar)    RadioGroup tabBar;    public final static String ACTION_EXIT_SYSTEM = "sys_exit";    private FragmentManager manager;    private FragmentTransaction transaction;    private FrHome frHome;    private FrHealth frHealth;    private FrPersonal frPersonal;    private long mExitTime;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_home);        ButterKnife.bind(this);        RadioButton tabHome = (RadioButton) tabBar.getChildAt(0);        tabHome.setChecked(true);        tabBar.setOnCheckedChangeListener(this);        initFragment();    }    private void initFragment() {        manager = getSupportFragmentManager();        transaction = manager.beginTransaction();        frHome = new FrHome();        transaction.add(R.id.frame_layout,frHome);        transaction.commit();    }    @Override    public void onCheckedChanged(RadioGroup radioGroup, @IdRes int checkedId) {        switch (checkedId) {            case R.id.tab_home:                FragmentTransaction ft1 = manager.beginTransaction();                hideAll(ft1);                if (frHome!=null){                    ft1.show(frHome);                }else {                    frHome=new FrHome();                    ft1.add(R.id.frame_layout,frHome);                }                ft1.commit();                break;            case R.id.tab_health:                FragmentTransaction ft2 = manager.beginTransaction();                hideAll(ft2);                if (frHealth!=null){                    ft2.show(frHealth);                }else {                    frHealth = new FrHealth();                    ft2.add(R.id.frame_layout,frHealth);                }                ft2.commit();                break;            case R.id.tab_personal:                FragmentTransaction ft5 = manager.beginTransaction();                hideAll(ft5);                if (frPersonal!=null){                    ft5.show(frPersonal);                }else {                    frPersonal = new FrPersonal();                    ft5.add(R.id.frame_layout, frPersonal);                }                ft5.commit();                break;        }    }    private void hideAll(FragmentTransaction ft){        if (ft==null){            return;        }        if (frHome!=null){            ft.hide(frHome);        }        if (frHealth!=null){            ft.hide(frHealth);        }        if (frPersonal!=null){            ft.hide(frPersonal);        }    }    @Override    public void onBackPressed() {        if ((System.currentTimeMillis() - mExitTime) > 2000) {            Toast.makeText(ActHome.this,"再按一次退出程序",Toast.LENGTH_SHORT).show();            mExitTime = System.currentTimeMillis();        } else {            new Handler().postDelayed(new Runnable() {                @Override                public void run() {                    onExit(ActHome.this);                }            }, 500);        }    }    public static void onExit(final Context context) {        try {            Intent intent = new Intent();            intent.setAction(context.getApplicationContext().getPackageName() + ACTION_EXIT_SYSTEM);            context.sendBroadcast(intent);            // MobclickAgent.onKillProcess(context);            new Handler().postDelayed(new Runnable() {                @Override                public void run() {                    System.exit(0);                }            }, 200);        } catch (Exception e) {            e.printStackTrace();        }    }}
原创粉丝点击