其实一直在学习,就是只学了一点点,有点懒得复习,没有复习就没有博客,然后就emmmm第二天忘光光,白学
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控件即可。
这里注意了,要几个item就要在menu里面设置几个item。
menu文件的创建,先在res中创建一个menu文件夹---->再创建一个随便啥名字的menu.xml文件然后在里面输入。里面有几个item待会下方的导航栏就会出现几个
还有就是itemIconTint,itemTextColor分别是导航栏的图标颜色,和字体颜色,这里我是在res中创建一个color文件夹,然后创建一个color.xml文件,然后在里面输入,上面是没被选中什么颜色,下面是呗选中什么颜色。这里我发现一个问题,就是超过三个以后再放入item,他就会只显示被选中的那个的标题,其他的都只显示图标,我百度了怎么解决在对应的Java文件中写这句mBottomNavigationView.setLabelVisibilityMode(1);即可,至于为什么,我链接找不到了。。。。。不好意思问老师就百度了一堆,不知道有没有人有啥办法替我解决一下
然后就是他的点击事件了,在对应的java文件中键入
BottomNavigationView mBottomNavigationView = findViewById(R.id.bottomNavigation);
mBottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
这里的R.id.home: 的home来自menu文件夹中对应item的id
3、然后就是Fragment
fragment我理解为是一种类似activity的控件就是在他里面可以放各种各样的控件,然后他可以被当作控件放在activity当中。Fragment的使用很简单,就是先创建一个fragment,然后放入布局中即可,然后我边是搭配BottomNavigation。
fragment的布局文件
他对应的java文件
public class YourFragment extends 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;
}
}
我经常百度,但是有点按不住性子,就喜欢看成果图再看代码,因为感觉看字很枯燥,所以我也放个成果图,我突然发现我不会放图片。。。。。。有没有大佬教教我,是没有服务器不能放吗。。。。

浙公网安备 33010602011771号