Scanner sc = new Scanner(System.in);
。。。。。。
。。。。。。
sc.close();
这两句移到for循环的外边,上下各一句
新建个 Activity,命名为 DrawerActivity:
class DrawerActivity : AppCompatActivity() {
companion object {
private const val TAG = "DrawerActivity"
}
private lateinit var binding: ActivityDrawerBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityDrawerBinding.inflate(layoutInflater)
setContentView(binding.root)
}
}
用 ViewBinding 绑定布局文件,接下来编辑 Activity 的布局文件:
<androidx.drawerlayout.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/drawerLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#000000"
tools:openDrawer="start"
tools:context=".dawerlayout.DrawerActivity">
<!-- Main Content -->
<androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/mainContainer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="56dp"
app:subtitleTextColor="#FFFFFF"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:title="个人中心"
app:titleTextColor="#FFFFFF" />
<RelativeLayout
android:id="@+id/contentContainer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FFFFFF">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tvContent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="主页内容"
android:textSize="16sp"
android:textColor="#000000"
android:layout_centerInParent="true" />
</RelativeLayout>
</androidx.appcompat.widget.LinearLayoutCompat>
<!-- Drawer -->
<com.google.android.material.navigation.NavigationView
android:id="@+id/navigationView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="#AFEEEF"
app:headerLayout="@layout/navigationview_header"/>
</androidx.drawerlayout.widget.DrawerLayout>
布局文件就不过多说明了,就是简简单单,一个主页的壳子。
不过目前 Activity 自带的 ActionBar 还在,我们需要把它去掉
<activity android:name=".dawerlayout.DrawerActivity"
android:theme="@style/Theme.AppCompat.Light.NoActionBar"/>
设置完这个属性,重启 Activity 会发现状态栏是灰色的,因此需要将状态栏的颜色改为透明,实现一个沉浸式状态栏的效果。向 Activity 中添加如下代码:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityDrawer2Binding.inflate(layoutInflater)
setContentView(binding.root)
setStatusBar()
}
private fun setStatusBar() {
// 利用状态栏工具类
StatusBarUtil.fitStatusLayout(this, binding.toolbar, true)
}
这里利用了一个StatusBarUtil
状态栏工具类来设置沉浸式状态栏,代码文件可以在这个地址获取。
看下沉浸式状态栏设置后的效果:
下一步给标题栏左部整个头像,实现点击头像可以打开抽屉的效果:
向 Activity 中添加如下代码:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityDrawer2Binding.inflate(layoutInflater)
setContentView(binding.root)
setStatusBar()
binding.toolbar.setNavigationIcon(R.drawable.icon_head)
binding.toolbar.setNavigationOnClickListener {
binding.drawerLayout.openDrawer(Gravity.LEFT, true)
}
}
好的,抽屉打开了,但是可以看到,抽屉打开后,抽屉的右部离屏幕右边还有一小段间隙,我们希望抽屉打开后可以占满全屏。虽然我们在布局文件已经给 NavigationView
设置了 match_parent 的宽度,但DrawerLayout默认会给抽屉留有 65dp 的间隙空间,我们可以给 NavigationView 设置 -65dp 的右边距,让抽屉打开时占满全屏:
<!-- Drawer -->
<com.google.android.material.navigation.NavigationView
...
android:layout_marginRight="-65dp"
... />
这样抽屉打开时就可以占满全屏了。