导入的依赖
这个框架会比系统自带的Fragment更为简便,快捷
其他准备
去除顶部工具栏
添加菜单栏
activity_main.xml文件及其准备
activity_main.xml文件
注意:include里面的layout为下面罗列出来的toolbar.xml文件和container.xml文件
<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayout 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"
tools:openDrawer="start"
android:id="@+id/drawer_layout"
tools:context=".MainActivity">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<include
android:id="@+id/include"
layout="@layout/toolbar"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<include
layout="@layout/container"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/include" />
</androidx.constraintlayout.widget.ConstraintLayout>
<com.google.android.material.navigation.NavigationView
android:id="@+id/navigationView"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
app:menu="@menu/menu"
>
</com.google.android.material.navigation.NavigationView>
</androidx.drawerlayout.widget.DrawerLayout>
toolbar.xml
toolbar的作用是设置顶部的工具栏以及设置各菜单项的名称
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/AppBarLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary"
android:minHeight="?attr/actionBarSize"
android:theme="?attr/actionBarTheme" />
<TextView
android:id="@+id/tv_title"
android:layout_gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="25sp"
android:textColor="@color/Black"
android:textStyle="bold"
android:text="TextView" />
</FrameLayout>
container.xml
container是各个项目跳转的容器,诸如FraMyCount.java的各个类都加载到container这个容器上,然后这个容器再安放到activity_main.xml上
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
</FrameLayout>```
MainActivity.java文件
import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBarDrawerToggle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.drawerlayout.widget.DrawerLayout;
import android.os.Build;
import android.os.Bundle;
import android.view.MenuItem;
import android.widget.TextView;
import com.example.myquestionbank.fragment.FraMyCount;
import com.example.myquestionbank.fragment.FraTraLightManege;
import com.google.android.material.navigation.NavigationView;
import org.w3c.dom.Text;
import me.yokeyword.fragmentation.SupportActivity;
import me.yokeyword.fragmentation.SupportFragment;
/**
* @author baro_knight
* date 2020-03-11
* */
*
public class MainActivity extends SupportActivity {
//这里继承的SupportActivity就是导入依赖的包
NavigationView ngv;
TextView mytitle;
DrawerLayout mDrawer;
Toolbar mToolbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
loadRootFragment(R.id.container,new FraMyCount());
// 获取各个组件的id
findId();
// 通过左上角的图标来打开侧滑的菜单
openstart();
// 设置监听
setClick();
}
private void openstart() {
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this,
mDrawer,mToolbar,R.string.navigation_drawer_open,
R.string.navigation_drawer_close
);
toggle.syncState();
mDrawer.addDrawerListener(toggle);
}
private void setClick() {
//
ngv.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()){
case R.id.menu_mycount:
setMyTitle("我的账户");
startWithPop(new FraMyCount());
break;
case R.id.menu_tra_manage:
setMyTitle("红绿灯管理");
startWithPop(new FraTraLightManege());
break;
}
// 每次点击一个项目后关闭侧滑
mDrawer.closeDrawers();
// 返回true表示在用户机中,当按击Item时,显示菜单被选中的状态
return true;
}
});
}
//设置标题
private void setMyTitle(String theTitle) {
mytitle.setText(theTitle);
}
private void findId() {
ngv = findViewById(R.id.navigationView);
mytitle = findViewById(R.id.tv_title);
mDrawer = findViewById(R.id.drawer_layout);
mToolbar = findViewById(R.id.toolbar);
}
}
# FraMyCount.java类
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.example.myquestionbank.R;
import me.yokeyword.fragmentation.SupportFragment;
public class FraMyCount extends SupportFragment {
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return LayoutInflater.from(getContext()).inflate(R.layout.fra_mycount,container,false);
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
TextView tvvv = view.findViewById(R.id.tvvv);
}
}
# FraMyCount.java类对应的xml文件(fra_mycount.xml)
<?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:id="@+id/tvvv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="TextView" />
</LinearLayout>
效果图: