zoukankan      html  css  js  c++  java
  • UI进阶2-滑动菜单

    在main.xml中使用DrawerLayout,它允许在布局中放入两个直接子控件,第一个是主屏幕显示内容,第二个是滑动屏幕显示内容

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.v4.widget.DrawerLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/draw_lay"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:app="http://schemas.android.com/apk/res-auto"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
        >
            <android.support.v7.widget.Toolbar
                android:id="@+id/toolBar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                android:background="?attr/colorPrimary"
                android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
                app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
                />
        </FrameLayout>
        <TextView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_gravity="start"
            android:text="滑动界面"
            android:textSize="30sp"
            android:background="#FFF"/><1--layout_gravity必须设置,可为left、right、start设置滑动方向-->
    
    </android.support.v4.widget.DrawerLayout>

    此时滑动菜单就可以显示了,但有时用户不知道滑动菜单的存在,所以我们在标题栏中在加入一个图标以供用户点击

    MainActivity中的代码

    package com.example.materialtest;
    
    import android.support.v4.view.GravityCompat;
    import android.support.v4.widget.DrawerLayout;
    import android.support.v7.app.ActionBar;
    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.widget.Toast;
    
    public class MainActivity extends AppCompatActivity {
        private DrawerLayout mDrawer;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            Toolbar toolbar=(Toolbar)findViewById(R.id.toolBar);
            setSupportActionBar(toolbar);
            mDrawer=(DrawerLayout)findViewById(R.id.draw_lay);//获取滑动菜单实例
            ActionBar actionBar=getSupportActionBar();//获取ToolBar实例
            if(actionBar!=null){
                actionBar.setDisplayHomeAsUpEnabled(true);//显示导航按钮
                actionBar.setHomeAsUpIndicator(R.drawable.f);//此时导航按钮是后退键,我们把它换掉
            }
        }
        public boolean onCreateOptionsMenu(Menu menu){
            getMenuInflater().inflate(R.menu.toolbar,menu);
            return true;
    
        }
    
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            switch (item.getItemId())
            {
                case android.R.id.home://该按钮WieHomeAsUp按钮,名称不可变
                    mDrawer.openDrawer(GravityCompat.START);//点击时滑出滑动菜单
                    break;
                case R.id.item1:
                    Toast.makeText(this,"你点击了第一个按钮",Toast.LENGTH_SHORT).show();
                    break;
                case R.id.item2:
                    Toast.makeText(this,"你点击了第二个按钮",Toast.LENGTH_SHORT).show();
                    break;
                case R.id.item3:
                    Toast.makeText(this,"你点击了第三个按钮",Toast.LENGTH_SHORT).show();
                    break;
            }
            return true;
        }
    }

     NavigationView的使用

    NavigationView可以帮我们更简单的写出更加美观的滑动菜单

    使用NavigationView之前由于它是support内的所以我们首先要添加依赖,build.gradle中添加

       compile 'com.android.support:design:26.0.0-alpha1'
        compile 'de.hdodenhof:circleimageview:2.1.0'

    这里注意依赖的版本一定要与Android的配置一样否则会报错同样在build.gradle中有下面三行代码,我这里全是用的26的

     compileSdkVersion 26
     targetSdkVersion 26
    compile 'com.android.support:appcompat-v7:26.+'

    在menu文件夹下创建navmenu.xml具体代码如下

    <?xml version="1.0" encoding="utf-8"?>
    <menu xmlns:android="http://schemas.android.com/apk/res/android">
        <group android:checkableBehavior="single"><!--group是一个组,single表示所有菜单只可以单选-->
            <item
                android:id="@+id/nav1"
                android:icon="@drawable/nav1"
                android:title="nav_1"/>
            <item
                android:id="@+id/nav2"
                android:icon="@drawable/nav2"
                android:title="nav_2"/>
            <item
                android:id="@+id/nav3"
                android:icon="@drawable/nav3"
                android:title="nav_3"/>
            <item
                android:id="@+id/nav4"
                android:icon="@drawable/nav4"
                android:title="nav_4"/>
    
        </group>
    </menu>

    在layout下新建navhead.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:background="?attr/colorPrimary">
    <de.hdodenhof.circleimageview.CircleImageView
    android:layout_width="70dp"
    android:layout_height="70dp"
    android:id="@+id/de_image"
    android:src="@drawable/head"
    android:layout_centerInParent="true"/>
    <TextView
    android:id="@+id/name"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="王**"
    android:textColor="#FFF"
    android:layout_above="@+id/address"
    android:textSize="14sp"
    />
    <TextView
    android:id="@+id/address"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="83763489453181@qq.com"
    android:textColor="#FFF"
    android:layout_alignParentBottom="true"
    android:textSize="14sp"
    />

    </RelativeLayout>

    修改main.xml,删除之前的文本域将DrawerLayout添加进去

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.v4.widget.DrawerLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/draw_lay"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:app="http://schemas.android.com/apk/res-auto"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
        >
            <android.support.v7.widget.Toolbar
                android:id="@+id/toolBar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                android:background="?attr/colorPrimary"
                android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
                app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
                />
        </FrameLayout>
        <android.support.design.widget.NavigationView
            android:id="@+id/nav_view"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_gravity="start"
            app:menu="@menu/nav_menu"
            app:headerLayout="@layout/navhead"/>
    
    </android.support.v4.widget.DrawerLayout>

    修改MainActivity,代码如下

    
    
    package com.example.materialtest;

    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.ActionBar;
    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.widget.Toast;

    public class MainActivity extends AppCompatActivity {
    private DrawerLayout mDrawer;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    final Toolbar toolbar=(Toolbar)findViewById(R.id.toolBar);
    setSupportActionBar(toolbar);
    mDrawer=(DrawerLayout)findViewById(R.id.draw_lay);
    NavigationView navigationView=(NavigationView)findViewById(R.id.nav_view);//NavigationView
         navigationView.setItemIconTintList(null);
         ActionBar actionBar=getSupportActionBar();
    if(actionBar!=null){
    actionBar.setDisplayHomeAsUpEnabled(true);
    actionBar.setHomeAsUpIndicator(R.drawable.f);
    }
    //NavigationView
    navigationView.setCheckedItem(R.id.nav1);//设置默认选中
    navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener(){
    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
    if (item.getItemId()==R.id.nav1){
    mDrawer.closeDrawers();
    }

    return true;
    }
    });
    }
    public boolean onCreateOptionsMenu(Menu menu){
    getMenuInflater().inflate(R.menu.toolbar,menu);
    return true;

    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId())
    {
    case android.R.id.home:
    mDrawer.openDrawer(GravityCompat.START);
    break;
    case R.id.item1:
    Toast.makeText(this,"你点击了第一个按钮",Toast.LENGTH_SHORT).show();
    break;
    case R.id.item2:
    Toast.makeText(this,"你点击了第二个按钮",Toast.LENGTH_SHORT).show();
    break;
    case R.id.item3:
    Toast.makeText(this,"你点击了第三个按钮",Toast.LENGTH_SHORT).show();
    break;
    }
    return true;
    }
    }
    
    

    这一篇博客和上一篇的结合起来可以达到以下效果

    在main.java中加入navigationView.setItemIconTintList(null); 可以解决NavigationView中Icon不显示的问题

  • 相关阅读:
    [Windows] 使用SC 命令管理与配置服务
    [SharePoint 2010] SharePoint 2010 部署、收回和删除解决方案----STSADM和PowerShell
    [SharePoint 2010] SharePoint 2010 FBA 配置以及自定义首页
    [Log]ASP.NET之HttpModule 事件执行顺序
    [SQL] 命令远程恢复数据库
    [工具] 各种主流 SQLServer 迁移到 MySQL 工具对比
    [工具] TreeSizeFree 查看每个文件夹的大小
    [APP] Android 开发笔记 006-使用短信验证SDK进行短信验证
    [APP] Android 开发笔记 004-Android常用基本控件使用说明
    [APP] Android 开发笔记 003-使用Ant Release 打包与keystore加密说明
  • 原文地址:https://www.cnblogs.com/837634902why/p/10566038.html
Copyright © 2011-2022 走看看