开源项目CircleImageView轻松实现图片圆形化的功能
implementation 'de.hdodenhof:circleimageview:3.0.1'
创建menu文件夹,创建nav_menu.xml文件,编写菜单子项
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android">
<group android:checkableBehavior="single">
<item
android:title="Call"
android:id="@+id/navCall"
android:icon="@drawable/nav_call"/>
<item
android:title="Friends"
android:id="@+id/navFriends"
android:icon="@drawable/nav_friends"/>
<item
android:title="Location"
android:id="@+id/navLocation"
android:icon="@drawable/nav_location"/>
<item
android:title="Mail"
android:id="@+id/navMail"
android:icon="@drawable/nav_mail"/>
<item
android:title="Task"
android:id="@+id/navTask"
android:icon="@drawable/nav_task"/>
</group>
</menu>
创建侧拉菜单头部视图nav_header.xml,与main.xml同级
<?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="180dp"
android:padding="10dp"
android:background="@color/design_default_color_primary_variant">
<de.hdodenhof.circleimageview.CircleImageView
android:layout_width="70dp"
android:layout_height="70dp"
android:id="@+id/iconImage"
android:src="@drawable/nav_icon"
android:layout_centerInParent="true"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/mailText"
android:layout_alignParentBottom="true"
android:text="tonygreendev@gmail.com"
android:textColor="#FFF"
android:textSize="14sp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/userText"
android:layout_above="@+id/mailText"
android:text="Tony Green"
android:textColor="#FFF"
android:textSize="14sp"/>
</RelativeLayout>
main.xml的代码
<?xml version="1.0" encoding="utf-8"?>
<!-- Use DrawerLayout as root container for activity -->
<androidx.drawerlayout.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/drawerLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/design_default_color_primary"
android:theme="@style/Theme.AppCompat.Light.DarkActionBar"
app:popupTheme="@style/Theme.AppCompat.Light"/>
</FrameLayout>
<com.google.android.material.navigation.NavigationView
android:id="@+id/navView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity = "start"
app:menu="@menu/nav_menu"
app:headerLayout="@layout/nav_header"/>
</androidx.drawerlayout.widget.DrawerLayout>
menu中toolbar.xml的代码
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/backup"
android:icon="@drawable/ic_backup"
android:title="Backup"
app:showAsAction="always"/>
<item android:id="@+id/delete"
android:icon="@drawable/ic_delete"
android:title="Delete"
app:showAsAction="always"/>
<item android:id="@+id/settings"
android:icon="@drawable/ic_settings"
android:title="Settings"
app:showAsAction="always"/>
</menu>
MainActivity中的代码
package com.example.materialtest
import android.content.ClipData
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.Menu
import android.view.MenuItem
import android.view.View
import android.widget.Toast
import androidx.appcompat.view.menu.MenuView
import androidx.appcompat.widget.Toolbar
import androidx.core.view.GravityCompat
import androidx.core.view.MenuItemCompat
import androidx.drawerlayout.widget.DrawerLayout
import androidx.navigation.Navigation
import com.google.android.material.internal.NavigationMenu
import com.google.android.material.internal.NavigationMenuItemView
import com.google.android.material.navigation.NavigationView
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val toolbar : Toolbar = findViewById(R.id.toolbar)
val navView : NavigationView = findViewById(R.id.navView)
val drawerLayout : DrawerLayout = findViewById(R.id.drawerLayout)
setSupportActionBar(toolbar)
supportActionBar?.let {
it.setDisplayHomeAsUpEnabled(true)
it.setHomeAsUpIndicator(R.drawable.ic_menu)
}
navView.setCheckedItem(R.id.navCall)
navView.setNavigationItemSelectedListener {
drawerLayout.closeDrawers()
true
}
}
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
menuInflater.inflate(R.menu.toolbar,menu)
return true
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
val drawerLayout : DrawerLayout = findViewById(R.id.drawerLayout)
when(item.itemId){
R.id.backup -> Toast.makeText(this,"you clicked backup",Toast.LENGTH_LONG).show()
R.id.delete -> Toast.makeText(this,"you clicked delete",Toast.LENGTH_LONG).show()
R.id.settings -> Toast.makeText(this,"you clicked settings",Toast.LENGTH_LONG).show()
android.R.id.home -> drawerLayout.openDrawer(GravityCompat.START)
}
return true
}
}
出现问题在于控件绑定,绑定时我一开始直接在
val navView : NavigationView = findViewById(R.id.navView)
中绑定了NavigationView的菜单子项id,项目报空指针异常,所以这里应该绑的是菜单视图的,然后再通过
navView.setCheckedItem(R.id.navCall)
navView.setNavigationItemSelectedListener {
drawerLayout.closeDrawers()
true
}
去让菜单绑定子项。
版权声明:本文为m0_51744744原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。