Android(安卓)App应用底部导航栏实现的一种方式
16lz
2021-12-04
效果图:
代码实现:LinearLayout + TextView
package com.anyanyan.vmoive.activity;import android.os.Bundle;import android.support.v4.app.Fragment;import android.support.v4.app.FragmentTransaction;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.FrameLayout;import android.widget.TextView;import com.anyanyan.vmoive.R;import com.anyanyan.vmoive.fragment.Fragment1;import com.anyanyan.vmoive.fragment.Fragment2;import com.anyanyan.vmoive.fragment.Fragment3;import com.anyanyan.vmoive.fragment.Fragment4;import butterknife.BindView;import butterknife.ButterKnife;public class Main2Activity extends AppCompatActivity implements View.OnClickListener { @BindView(R.id.tv_tab1) TextView mTvTab1; @BindView(R.id.tv_tab2) TextView mTvTab2; @BindView(R.id.tv_tab3) TextView mTvTab3; @BindView(R.id.tv_tab4) TextView mTvTab4; @BindView(R.id.frameLayout) FrameLayout mFrameLayout; private Fragment fragment1, fragment2, fragment3, fragment4; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); ButterKnife.bind(this); initFirst(); bindTabs(); } private void initFirst() { mTvTab1.setSelected(true); if (fragment1 == null) { fragment1 = new Fragment1(); } getSupportFragmentManager().beginTransaction().add(R.id.frameLayout, fragment1) .commitAllowingStateLoss(); } private void setAllTabNormal() { mTvTab1.setSelected(false); mTvTab2.setSelected(false); mTvTab3.setSelected(false); mTvTab4.setSelected(false); } private void setAllFragmentHide(FragmentTransaction fragmentTransaction) { if (fragment1 != null) { fragmentTransaction.hide(fragment1); } if (fragment2 != null) { fragmentTransaction.hide(fragment2); } if (fragment3 != null) { fragmentTransaction.hide(fragment3); } if (fragment4 != null) { fragmentTransaction.hide(fragment4); } } private void bindTabs() { mTvTab1.setOnClickListener(this); mTvTab2.setOnClickListener(this); mTvTab3.setOnClickListener(this); mTvTab4.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.tv_tab1: setCurrentTab(1); break; case R.id.tv_tab2: setCurrentTab(2); break; case R.id.tv_tab3: setCurrentTab(3); break; case R.id.tv_tab4: setCurrentTab(4); break; } } public void setCurrentTab(int tabNo) { FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); setAllTabNormal(); setAllFragmentHide(transaction); switch (tabNo) { case 1: mTvTab1.setSelected(true); if (fragment1 == null) { fragment1 = new Fragment1(); transaction.add(R.id.frameLayout, fragment1); } else { transaction.show(fragment1); } break; case 2: mTvTab2.setSelected(true); if (fragment2 == null) { fragment2 = new Fragment2(); transaction.add(R.id.frameLayout, fragment2); } else { transaction.show(fragment2); } break; case 3: mTvTab3.setSelected(true); if (fragment3 == null) { fragment3 = new Fragment3(); transaction.add(R.id.frameLayout, fragment3); } else { transaction.show(fragment3); } break; case 4: mTvTab4.setSelected(true); if (fragment4 == null) { fragment4 = new Fragment4(); transaction.add(R.id.frameLayout, fragment4); } else { transaction.show(fragment4); } break; } transaction.commitAllowingStateLoss(); }}
布局文件:activity_main2.xml <?xml version="1.0" encoding="utf-8"?>
TextView的文字颜色设置资源:drawable/tab1_text_color <?xml version="1.0" encoding="utf-8"?>
在values文件夹中的colors文件中添加: TextView的drawableTop资源:drawable/tab1_menu.xml(其他3个依次类推)name="tab_selected">#FFEA5651 name="tab_normal">@color/gray
<?xml version="1.0" encoding="utf-8"?>完成。xmlns:android="http://schemas.android.com/apk/res/android"> - android:state_selected="true" android:drawable="@mipmap/sgk_tab_course_selected"/>
- android:drawable="@mipmap/sgk_tab_course_normal"/>
更多相关文章
- NPM 和webpack 的基础使用
- 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
- android Error inflating class com.google.android.material.ch
- Unity3d 调用Android震动
- android之File文件简单操作
- Android(安卓)文件操作工具类
- Android(安卓)Dex文件结构
- Android(安卓)通过HTTP POST 上传图片文件
- android LayerDrawable 图层的实现