效果圖
添加依賴庫
(要是高版本的Android Studio,則已經為我們自動添加了所需的依賴庫)
dependencies {compile fileTree(
dir:
'libs', include: [
'*.jar'])compile
'com.android.support:appcompat-v7:22.2.1'compile
'com.android.support:design:22.2.1'
}
創建菜單項
nav_menu.xml
<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android"><group android:checkableBehavior="single"><item
android:id="@+id/home"android:title="Home"android:icon="@drawable/ic_home"/><item
android:id="@+id/settings"android:title="Settings"android:icon="@drawable/ic_setting"/><item
android:id="@+id/trash"android:title="Trash"android:icon="@drawable/ic_trash"/><item
android:id="@+id/logout"android:title="Logout"android:icon="@drawable/ic_exit"/></group>
</menu>
創建布局
nav_header.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="190dp"android:paddingTop="20dp"android:paddingBottom="20dp"android:background="@color/colorPrimary"android:orientation="vertical"><ImageView
android:id="@+id/image_view"android:layout_width="wrap_content"android:layout_height="0dp"android:layout_weight="1"android:src="@drawable/ic_person"android:layout_gravity="center"/><TextView
android:id="@+id/tv_email"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="1234563278@126.com"android:layout_gravity="center"android:textSize="20sp"android:textColor="@color/White"/></LinearLayout>
nav_menu與nav_header分別為NavigationView中的頭部與菜單項。記得NavigationView必須以DrawerLayout為父容器
content_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="match_parent"><TextView
android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Navigation Drawer"android:layout_centerHorizontal="true"android:layout_centerVertical="true"android:textSize="25sp"/></RelativeLayout>
main.xml
<?xml version=
"1.0" encoding=
"utf-8"?><android
.support.v4
.widget.DrawerLayoutxmlns:android=
"http://schemas.android.com/apk/res/android"xmlns:app=
"http://schemas.android.com/apk/res-auto"android:id=
"@+id/drawer_layout"android:layout_width=
"match_parent"android:layout_height=
"match_parent"><android
.support.design.widget.CoordinatorLayoutandroid:layout_width=
"match_parent"android:layout_height=
"match_parent"><android
.support.v7
.widget.Toolbarandroid:id=
"@+id/tool_bar"android:layout_width=
"match_parent"android:layout_height=
"?attr/actionBarSize"android:background=
"@color/colorPrimary"></android
.support.v7
.widget.Toolbar></android
.support.design.widget.CoordinatorLayout><android
.support.design.widget.NavigationViewandroid:id=
"@+id/navigation_view"android:layout_width=
"wrap_content"android:layout_height=
"match_parent"app:headerLayout=
"@layout/nav_header"app:menu=
"@menu/nav_menu"android:layout_gravity=
"start"></android
.support.design.widget.NavigationView></android
.support.v4
.widget.DrawerLayout>
界面
package
com.example.demo.navigationviewtestimport android
.os.Bundle
import android
.support.design.widget.NavigationView
import android
.support.v4
.widget.DrawerLayout
import android
.support.v7
.app.ActionBarDrawerToggle
import android
.support.v7
.app.AppCompatActivity
import android
.support.v7
.widget.Toolbar
import android
.view.MenuItem
import android
.view.View
import android
.widget.TextView
import android
.widget.Toastpublic class MainActivity extends AppCompatActivity {private DrawerLayout mDrawerLayoutprivate ActionBarDrawerToggle mActionBarDrawerToggleprivate Toolbar mToolbarprivate NavigationView mNavigationView@Overrideprotected void onCreate(Bundle savedInstanceState) {super
.onCreate(savedInstanceState)setContentView(R
.layout.main)mDrawerLayout = (DrawerLayout) findViewById(R
.id.drawer_layout)mToolbar = (Toolbar) findViewById(R
.id.tool_bar)mNavigationView = (NavigationView) findViewById(R
.id.navigation_view)mToolbar
.setTitle(
"NavigationView")setSupportActionBar(mToolbar)mActionBarDrawerToggle = new ActionBarDrawerToggle(this,mDrawerLayout,mToolbar,R
.string.open,R
.string.close){@Overridepublic void onDrawerOpened(View drawerView) {super
.onDrawerOpened(drawerView)}@Overridepublic void onDrawerClosed(View drawerView) {super
.onDrawerClosed(drawerView)}}mActionBarDrawerToggle
.syncState()mDrawerLayout
.setDrawerListener(mActionBarDrawerToggle)mNavigationView
.setNavigationItemSelectedListener(new NavigationView
.OnNavigationItemSelectedListener() {@Overridepublic boolean onNavigationItemSelected(MenuItem menuItem) {int id = menuItem
.getItemId()switch (id) {case R
.id.home:Toast
.makeText(getApplicationContext(),
"Home", Toast
.LENGTH_SHORT)
.show()mDrawerLayout
.closeDrawers()
breakcase R
.id.settings:Toast
.makeText(getApplicationContext(),
"Settings", Toast
.LENGTH_SHORT)
.show()mDrawerLayout
.closeDrawers()
breakcase R
.id.trash:Toast
.makeText(getApplicationContext(),
"Trash", Toast
.LENGTH_SHORT)
.show()mDrawerLayout
.closeDrawers()
breakcase R
.id.logout:Toast
.makeText(getApplicationContext(),
"Logout", Toast
.LENGTH_SHORT)
.show()mDrawerLayout
.closeDrawers()
break}return true}})TextView tv_email = (TextView)findViewById(R
.id.tv_email)tv_email
.setText(
"http://blog.csdn.net/wiseclown")}}
注意
compile 'com.android.support:design:23.2.0',則可以使用addDrawerListener來替代setDrawerListener,以及NavigationView中添加了getHeaderView( )方法來獲取Header view。
源碼地址:https://github.com/xkck/NavigationViewTest
參考文章
[1]http://blog.csdn.net/lmj623565791/article/details/46405409
[3]http://www.jianshu.com/p/76e30f87a4ed
[2]http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0608/3011.html
總結
以上是生活随笔為你收集整理的Android Design新特性-NavigationView实现抽屉式的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。