通过 Navigation View 创建导航抽屉

    Android  Design Support   Library 2015年在Goole   I/O大会上提出的,Android Design  Support Library 中提出了很多Materail  Design 技术。前几天针对这个新的技术库已经写了三个控件了有强大提示的功能的TextInputLayout   悬浮按钮控件Floating action Button 和弹出框 SnackBar   今天研究一下听闻好久的一个新控件  Navigation View 创建导航抽屉。

   Navigation的使用

      写一个简单的demo来展示navigation的使用

      1    首先先引用支持包                 

       compile 'com.android.support:design:25.0.1'
    2     布局文件  activity_main

                

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/dralayout"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    tools:context="com.navigationview.MainActivity">
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <android.support.v7.widget.Toolbar
            android:id="@+id/tb_id"
            android:layout_width="match_parent"
            android:layout_height="40dp"
            >
        </android.support.v7.widget.Toolbar>
        <TextView
            android:id="@+id/content_tv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:text="Hello World!"
            />
    </RelativeLayout>

    <android.support.design.widget.NavigationView
        android:id="@+id/nv_menu"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true"
        android:layout_gravity="left"
        app:headerLayout="@layout/drawablemenu"
        app:menu="@menu/menu"
        >

    </android.support.design.widget.NavigationView>

</android.support.v4.widget.DrawerLayout>
其中 app:headerLayout 用于指定一个任意的布局,作为导航抽屉的顶部,如效果图中的粉色带头像的部分。

而 app:menu 用于指定导航抽屉的菜单项,比如listview的列表

drawablemenu 简单的布局:     
<?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="192dp"
                android:background="@color/colorAccent"
    >

    <ImageView
        android:layout_width="100dp"
        android:layout_height="80dp"
        android:src="@mipmap/avar"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true"
        android:id="@+id/imageView"/>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/avar_name"
        android:textColor="@color/bule"
        android:textStyle="bold"
        android:textSize="18sp"
        android:layout_below="@+id/imageView"
        android:layout_centerHorizontal="true"/>
</RelativeLayout>
menu的配置文件   

<?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/item1"
          android:icon="@mipmap/itemimg"
          android:title="标题1"
        >

    </item>
    <item android:id="@+id/item2"
          android:icon="@mipmap/itemimg"
          android:title="标题2"
        >
    </item>
    <item android:id="@+id/item3"
          android:icon="@mipmap/itemimg"
          android:title="标题3"
        >
    </item>
    <item android:id="@+id/item4"
          android:icon="@mipmap/itemimg"
          android:title="标题4"
        >
        <menu >
            <item android:id="@+id/it_1"
                  android:title="标题4_1"
                >
            </item>
            <item android:id="@+id/it_2"
                  android:title="标题4_2"
                >
            </item>
            <item android:id="@+id/it_3"
                  android:title="标题4_3"
                >
            </item>

        </menu>
    </item>
</group>
</menu>
activity:

 

package com.navigationview;

import android.support.annotation.NonNull;
import android.support.design.widget.NavigationView;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.view.Window;

import java.lang.reflect.Method;

/**
 * @author  凉菇凉
 * @deprecated  navigation抽屉的效果
 */
public class MainActivity extends AppCompatActivity {

    private DrawerLayout mDrawerLayout;
    private Toolbar mToolbar;
    private NavigationView mNavigationView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mDrawerLayout= (DrawerLayout) findViewById(R.id.dralayout);
        mToolbar= (Toolbar) findViewById(R.id.tb_id);
        mNavigationView= (NavigationView) findViewById(R.id.nv_menu);
        setSupportActionBar(mToolbar);
        mToolbar.setTitle("navigation的演示");
        mToolbar.setNavigationIcon(R.mipmap.itemimg);
        if(mNavigationView!=null){
            mNavigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
                @Override
                public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                    item.setChecked(true);
                    mDrawerLayout.closeDrawers();
                    return true;
                }
            });
        }
    }


}
在这个demo中遇到两个问题

    一个是menu中设置的icon没有显示图标 。这个问题试了网上的好几种方法还是不行,后期查到补上;

   二是引用抽屉的时候没有在配置文件中设置,出现错误

 Caused by: java.lang.IllegalStateException: This Activity already has an action bar supplied by the window decor. Do not request Window.FEATURE_SUPPORT
_ACTION_BAR and set windowActionBar to false in your theme to use a Toolbar instead. 
解决办法:

问题原因:

当在activity中调用了setSupportActionBar(toolbar); 

当在activity中调用了setSupportActionBar(toolbar);

同时,AndroidManifest.xml 对应的Activity标签的android:theme为

android:theme="@style/AppTheme" >
style资源文件中的parent为
parent="Theme.AppCompat.Light.DarkActionBar

解决办法:

1 在style配置文件中加上

<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
或者,将parent改为

parent="Theme.AppCompat.Light.NoActionBar"
2、在AndroidManifest.xml 对应的Activity标签的android:theme引用该style中的修改的主题






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值