其实一直在学习,就是只学了一点点,有点懒得复习,没有复习就没有博客,然后就emmmm第二天忘光光,白学

1、判断软件是否是第一次启动

public void doFirst(){
   //创建SharedPreferences。
   //其中的两个参数分别为:创建文件的名称,和数据的操作模式。
   //操作模式:操作模式分为1、MODE_PRIVATE,则该配置文件只能被自己的应用程序访问。2、MODE_WORLD_READABLE,则该配置文件除了自己访问外还可以被其它应该程序读取。3、MODE_WORLD_WRITEABLE,则该配置文件除了自己访问外还可以被其它应该程序读取和。
   SharedPreferences sharedPreferences = getSharedPreferences("data",0)
   //创建一个boolean类型的数据来储存第一次运行时判断的依据。
   //getBoolean()中的两个数分别为,对应的“键”和“数据”。
  //我试过了,如果我们在文件中什么数据都还没放入,这里读取获得的数据就是我们输入的那个数据,如果后面再加入这个键所对应的数据,并提交,那么我们这里获取到的数据就是后面加入的数据。
   Boolean user_first = sharedPreferemces.getBoolean("FIRST",true);
   //进行判断
   if(user_first){
       //如果是第一次打开的话我们还没有往其中加入数据,所以user_first的值会为我们上面用getBoolean()这个获取方法时,我们输入的键对应的值所以为true。
       //所以这时我们执行引导页
       sharedPreferemces.edit().putBoolena("FIRST",false).commit;
       //引导页我写成了两个方法,这里就不写出来了。
       initData();
       initView();
  }else{
       //如果是第二次启动,那么我们第一次启动时写入的false就会与键”FIRST“的值对应,这时上面的user_first获取的值就会为false。
       //所以这时候我们直接跳转到主页面,因为这里我不会用其它的方法弄主页面,所以只能用Intent
        Intent intent = new Intent(FirstActivity.this, MainActivity.class);
        startActivity(intent);
  }
}

2、主页下方的导航栏(BottomNavigationView)

很简单,只要在对应的布局文件中跟其它普通控件一样加入BottomNavigationView控件即可。

<?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"
   tools:context=".MainActivity">
   
       <com.google.android.material.bottomnavigation.BottomNavigationView
       android:id="@+id/bottomNavigation"
       android:layout_width="match_parent"
       android:layout_height="0dp"
       android:background="#0E0E0E"
       android:layout_weight="1"
       app:menu="@menu/nav"
       app:itemIconTint="@color/aaaa_bbbb"
       app:itemTextColor="@color/aaaa_bbbb"/>
   
</LinearLayout>

这里注意了,要几个item就要在menu里面设置几个item。

menu文件的创建,先在res中创建一个menu文件夹---->再创建一个随便啥名字的menu.xml文件然后在里面输入。里面有几个item待会下方的导航栏就会出现几个

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">

   <item android:id="@+id/home"
       android:icon="@drawable/aaa"
       android:title="首页"/>

   <item android:id="@+id/message"
       android:icon="@drawable/b"
       android:title="全部服务"/>

   <item android:id="@+id/mini"
       android:icon="@drawable/c"
       android:title="智慧环保"/>

   <item android:id="@+id/your"
       android:icon="@drawable/b"
       android:title="新闻"/>

   <item android:id="@+id/we"
       android:icon="@drawable/aaa"
       android:title="个人中心"/>
</menu>

还有就是itemIconTint,itemTextColor分别是导航栏的图标颜色,和字体颜色,这里我是在res中创建一个color文件夹,然后创建一个color.xml文件,然后在里面输入,上面是没被选中什么颜色,下面是呗选中什么颜色。这里我发现一个问题,就是超过三个以后再放入item,他就会只显示被选中的那个的标题,其他的都只显示图标,我百度了怎么解决在对应的Java文件中写这句mBottomNavigationView.setLabelVisibilityMode(1);即可,至于为什么,我链接找不到了。。。。。不好意思问老师就百度了一堆,不知道有没有人有啥办法替我解决一下

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

然后就是他的点击事件了,在对应的java文件中键入

BottomNavigationView mBottomNavigationView = findViewById(R.id.bottomNavigation);
mBottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
   @Override
   public boolean onNavigationItemSelected(@NonNull MenuItem item) {
       switch(item.getItemId()){
           case R.id.home:
               break;
           case R.id.message:
               break;
      }
       return true;
  }
});

这里的R.id.home: 的home来自menu文件夹中对应item的id

3、然后就是Fragment

fragment我理解为是一种类似activity的控件就是在他里面可以放各种各样的控件,然后他可以被当作控件放在activity当中。Fragment的使用很简单,就是先创建一个fragment,然后放入布局中即可,然后我边是搭配BottomNavigation。

fragment的布局文件

<?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">

   <TextView
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="这是新闻"
       android:layout_centerHorizontal="true"
       android:layout_centerVertical="true"
       android:textSize="25sp"/>

</RelativeLayout>

他对应的java文件

public class YourFragment extends Fragment {
   @Nullable
   @Override
   public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

       View fragment = inflater.inflate(R.layout.your_fragment,null);
       return fragment;
  }
}

放入他所要进去的activity中,我这里是将他放入frameLayout中,之所以这样是因为参考了一个人的代码,但是我记录太多了,找不到链接了,就不放代码了。。。。给他道个歉。。。

<?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"
   tools:context=".MainActivity">

 <FrameLayout
     android:id="@+id/framelayout"
     android:layout_width="match_parent"
     android:layout_height="0dp"
     android:layout_weight="8">

 </FrameLayout>

   <com.google.android.material.bottomnavigation.BottomNavigationView
       android:id="@+id/bottomNavigation"
       android:layout_width="match_parent"
       android:layout_height="0dp"
       android:background="#FFFFFF"
       android:layout_weight="1"

       app:menu="@menu/nav"
       app:itemIconTint="@color/aaaa_bbbb"
       app:itemTextColor="@color/aaaa_bbbb"/>


</LinearLayout>

然后这里我直接把跟BottomNavigationView结合的java代码放出来吧,这里面一共有五个fragment

public class MainActivity extends AppCompatActivity implements BottomNavigationView.OnNavigationItemSelectedListener {

    private FragmentManager mFragmentManager; //获取碎片管理者
    private BottomNavigationView mBottomNavigationView;
    private Fragment mFragmentHome;
    private Fragment mFragmentMessage;
    private Fragment mFragmentMini;
    private Fragment mFragmentWe;
    private Fragment mFragmentYour;
    private Fragment fragmentNow;
    private FrameLayout frameLayout;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initView();
        initDefaultFragment();

    }
    //创建Fragment,第一次Fragment要显示哪个
    private void initDefaultFragment() {
        FragmentTransaction fragmentTransaction = mFragmentManager.beginTransaction();
        fragmentTransaction.add(R.id.framelayout,mFragmentHome);
        fragmentTransaction.addToBackStack(null);
        //提交事务
        fragmentTransaction.commit();
        fragmentNow = mFragmentHome;
    }

    @SuppressLint("WrongConstant")
    //初始化底部导航栏和Fragment
    private void initView() {
        //实例化底部导航栏布局
        mBottomNavigationView = findViewById(R.id.bottomNavigation);
        //实例化Fragment要放置的父布局
        frameLayout = findViewById(R.id.framelayout);
        //实例化Fragment
        mFragmentHome = new HomeFragment();
        mFragmentMessage = new MessageFragment();
        mFragmentMini = new MiniFragment();
        mFragmentWe = new WeFragment();
        mFragmentYour = new YourFragment();
        //获取碎片管家
        mFragmentManager = getSupportFragmentManager();


        //导航栏的监听
        mBottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                return false;
            }
        });




        //这行是为了控件超过三个不显示字的问题
        mBottomNavigationView.setLabelVisibilityMode(1);
    }

    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
        FragmentTransaction fragmentTransaction1 = mFragmentManager.beginTransaction();
        switch (item.getItemId()){
            case R.id.home:
                if (mFragmentHome.isAdded()) {
                    //如果fragmentOne已经存在,则隐藏当前的fragment,
                    //然后显示fragmentOne(不会重新初始化,只是加载之前隐藏的fragment)
                    fragmentTransaction1.hide(fragmentNow).show(mFragmentHome);
                } else {
                    //如果fragmentOne不存在,则隐藏当前的fragment,
                    //然后添加fragmentOne(此时是初始化)
                    fragmentTransaction1.hide(fragmentNow).add(R.id.framelayout, mFragmentHome);
                    fragmentTransaction1.addToBackStack(null);

                }
                fragmentNow = mFragmentHome;
                fragmentTransaction1.commit();
                break;
            case R.id.message:
                if (mFragmentMessage.isAdded()) {
                    //如果fragmentOne已经存在,则隐藏当前的fragment,
                    //然后显示fragmentOne(不会重新初始化,只是加载之前隐藏的fragment)
                    fragmentTransaction1.hide(fragmentNow).show(mFragmentMessage);
                } else {
                    //如果fragmentOne不存在,则隐藏当前的fragment,
                    //然后添加fragmentOne(此时是初始化)
                    fragmentTransaction1.hide(fragmentNow).add(R.id.framelayout, mFragmentMessage);
                    fragmentTransaction1.addToBackStack(null);

                }
                fragmentNow = mFragmentMessage;
                fragmentTransaction1.commit();
                break;
            case  R.id.mini:
                if (mFragmentMini.isAdded()) {
                    //如果fragmentOne已经存在,则隐藏当前的fragment,
                    //然后显示fragmentOne(不会重新初始化,只是加载之前隐藏的fragment)
                    fragmentTransaction1.hide(fragmentNow).show(mFragmentMini);
                } else {
                    //如果fragmentOne不存在,则隐藏当前的fragment,
                    //然后添加fragmentOne(此时是初始化)
                    fragmentTransaction1.hide(fragmentNow).add(R.id.framelayout, mFragmentMini);
                    fragmentTransaction1.addToBackStack(null);

                }
                fragmentNow = mFragmentMini;
                fragmentTransaction1.commit();
                break;
            case R.id.we:
                if (mFragmentWe.isAdded()) {
                    //如果fragmentOne已经存在,则隐藏当前的fragment,
                    //然后显示fragmentOne(不会重新初始化,只是加载之前隐藏的fragment)
                    fragmentTransaction1.hide(fragmentNow).show(mFragmentWe);
                } else {
                    //如果fragmentOne不存在,则隐藏当前的fragment,
                    //然后添加fragmentOne(此时是初始化)
                    fragmentTransaction1.hide(fragmentNow).add(R.id.framelayout, mFragmentWe);
                    fragmentTransaction1.addToBackStack(null);

                }
                fragmentNow = mFragmentWe;
                fragmentTransaction1.commit();
                break;
            case R.id.your:
                if (mFragmentYour.isAdded()) {
                    //如果fragmentOne已经存在,则隐藏当前的fragment,
                    //然后显示fragmentOne(不会重新初始化,只是加载之前隐藏的fragment)
                    fragmentTransaction1.hide(fragmentNow).show(mFragmentYour);
                } else {
                    //如果fragmentOne不存在,则隐藏当前的fragment,
                    //然后添加fragmentOne(此时是初始化)
                    fragmentTransaction1.hide(fragmentNow).add(R.id.framelayout, mFragmentYour);
                    fragmentTransaction1.addToBackStack(null);

                }
                fragmentNow = mFragmentYour;
                fragmentTransaction1.commit();
                break;

        }

        return true;
    }
}

我经常百度,但是有点按不住性子,就喜欢看成果图再看代码,因为感觉看字很枯燥,所以我也放个成果图,我突然发现我不会放图片。。。。。。有没有大佬教教我,是没有服务器不能放吗。。。。

 

 

posted @ 2021-03-08 22:05  陈强强强强强  阅读(95)  评论(0)    收藏  举报