MD之材料设计库(一)

本文主要介绍部分support:design(材料设计库)的控件使用,以及官方模板NavigationDrawer的实现。


DrawerLayout

该控件是一个侧滑菜单布局,当按照规定书写xml布局文件后,即可轻松实现侧滑效果。
ps:用于替代第三方的侧滑菜单,如sliding menu等。

这里给一个简单的Demo示例(配合Toolbar,不熟悉请看MD设计之起步):

这里写图片描述

左右侧滑菜单设定

DrawLayout主要分为左右侧滑菜单和主内容区,设定左右菜单的方法非常简单,只需要在你需要设定为菜单的xml布局中添加如下代码:
android:layout_gravity="start"
android:layout_gravity="end"

此外,我们也可以在代码中进行部分操作,如打开与关闭侧滑菜单,设定透明度,设置渐变色等等,

drawerLayout的打开与关闭

这里需要重点指出的是侧滑菜单的打开与关闭
打开DrawerLayout.openDrawer
关闭DrawerLayout.closeDrawer

设置监听事件

尽管drawerLayout可以通过addDrawerListener的方式为自己设定监听事件,但还是推荐使用ActionBarDrawerToggle和Toolbar配合使用,这样不仅方便统一管理,也可使代码结构更为清晰。

ActionBarDrawerToggle toggle = new ActionBarDrawerToggle
                (this,drawerLayout,toolbar,R.string.open_drawer,R.string.close_drawer){
            //这里可以重写很多方法,以实现自己的需求
            @Override
            public void onDrawerOpened(View drawerView) {
                getSupportActionBar().setTitle("Open");
                super.onDrawerOpened(drawerView);
            }

            @Override
            public void onDrawerClosed(View drawerView) {
                getSupportActionBar().setTitle("Close");
                super.onDrawerClosed(drawerView);
            }

            @Override
            public boolean onOptionsItemSelected(MenuItem item) {
                return super.onOptionsItemSelected(item);
            }
        };
        drawerLayout.addDrawerListener(toggle);
        toggle.syncState();

PS:在toolbar中也可以通过setNavigationOnClickListenersetOnMenuItemClickListener分别为对应的控件和MenuItem设置监听。

该Demo的主要布局文件
主界面布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
    tools:context="com.example.horizon.myapplication.MainActivity">

    <android.support.v4.widget.DrawerLayout
        android:id="@+id/drawerLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <include
            layout="@layout/drawer_content"/>

        <include
            layout="@layout/drawer_menu_left"
            android:layout_gravity="start"
            android:layout_width="240dp"
            android:layout_height="match_parent"/>


        <include
            layout="@layout/drawer_menu_right"
            android:layout_gravity="end"
            android:layout_width="240dp"
            android:layout_height="match_parent"/>

    </android.support.v4.widget.DrawerLayout>
</RelativeLayout>

content布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    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" />

    <TextView
        android:layout_marginTop="60dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Content布局"
        android:textSize="28sp"
        android:id="@+id/textView_content"

        android:layout_gravity="center_horizontal" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Left_Menu"
        android:id="@+id/button"
        android:layout_gravity="center"
        android:onClick="onClick"/>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Right_Menu"
        android:id="@+id/button2"
        android:layout_gravity="center"
        android:onClick="onClick"/>


</LinearLayout>

该控件用于侧滑简单的实现侧滑菜单,隶属于support:design材料库,使用前请先在gradle中添加依赖

compile 'com.android.support:design:23.3.0'

在DrawerLayout添加菜单布局,主要有头部布局文件和NavigationView布局
Demo
这里写图片描述

左菜单布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="240dp"
    android:layout_height="match_parent"
    android:background="@color/colorAccent">


    <android.support.design.widget.NavigationView
        android:id="@+id/nav_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:fitsSystemWindows="true"
        app:headerLayout="@layout/nav_header_main"
        app:menu="@menu/activity_main_drawer" />

</LinearLayout>

head布局

<?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="160dp"
    android:background="@drawable/side_nav_bar"
    android:gravity="bottom"
    android:orientation="vertical"
    android:padding="16dp"
    android:theme="@style/ThemeOverlay.AppCompat.Dark">

    <ImageView
        android:id="@+id/imageView"
        android:padding="0dp"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:paddingTop="@dimen/activity_horizontal_margin"
        android:src="@drawable/horizon" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingTop="12dp"
        android:text="Horizon"
        android:textAppearance="@style/TextAppearance.AppCompat.Body1" />

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="1308311472@qq.com" />

</LinearLayout>
<?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/nav_camera"
            android:icon="@drawable/ic_menu_camera"
            android:title="Import" />
        <item
            android:id="@+id/nav_gallery"
            android:icon="@drawable/ic_menu_gallery"
            android:title="Gallery" />
        <item
            android:id="@+id/nav_slideshow"
            android:icon="@drawable/ic_menu_slideshow"
            android:title="Slideshow" />
        <item
            android:id="@+id/nav_manage"
            android:icon="@drawable/ic_menu_manage"
            android:title="Tools" />
    </group>

    <item android:title="Communicate">
        <menu>
            <item
                android:id="@+id/nav_share"
                android:icon="@drawable/ic_menu_share"
                android:title="Share" />
            <item
                android:id="@+id/nav_send"
                android:icon="@drawable/ic_menu_send"
                android:title="Send" />
        </menu>
    </item>

</menu>

主活动代码

public class MainActivity extends AppCompatActivity implements
        NavigationView.OnNavigationItemSelectedListener,View.OnClickListener {

    private DrawerLayout drawerLayout;
    private Toolbar toolbar;
    private NavigationView navigationView;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);


        drawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout);
        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle
                (this, drawerLayout, toolbar, R.string.open_drawer, R.string.close_drawer) {
            //这里可以重写很多方法,以实现自己的需求
            @Override
            public void onDrawerOpened(View drawerView) {
                getSupportActionBar().setTitle("Open");
                super.onDrawerOpened(drawerView);
            }

            @Override
            public void onDrawerClosed(View drawerView) {
                getSupportActionBar().setTitle("Close");
                super.onDrawerClosed(drawerView);
            }

            @Override
            public boolean onOptionsItemSelected(MenuItem item) {
                return super.onOptionsItemSelected(item);
            }
        };
        drawerLayout.addDrawerListener(toggle);
        toggle.syncState();

        navigationView = (NavigationView) findViewById(R.id.nav_view);
        navigationView.setNavigationItemSelectedListener(this);

    }

    @Override
    public boolean onNavigationItemSelected(MenuItem item) {
        // Handle navigation view item clicks here.
        int id = item.getItemId();

        if (id == R.id.nav_camera) {
            // Handle the camera action
        } else if (id == R.id.nav_gallery) {

        } else if (id == R.id.nav_slideshow) {

        } else if (id == R.id.nav_manage) {

        } else if (id == R.id.nav_share) {

        } else if (id == R.id.nav_send) {

        }

        drawerLayout.closeDrawer(GravityCompat.START);
        return true;
    }

    @Override
    public void onClick(View v) {
        if(v.getId() == R.id.button)
            drawerLayout.openDrawer(GravityCompat.START);
        else
            drawerLayout.openDrawer(GravityCompat.END);
    }
}

当然,对于很多布局控件,如果条件允许,你完全可以去除多余的嵌套。

这样,就简单实现了官方模板NavigationDrawer的主要功能,完整模板Demo:
这里写图片描述

关于floating button,snacbar以及沉浸式状态栏等,我会在后面的文章中陆续讲解。

本文的源码地址:https://github.com/walkthehorizon/AndroidLearnDemo

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 微信小程序并没有内置 MD5 ,需要自己引入第三方才能在小程序中实现 MD5 的功能。MD5(Message Digest Algorithm 5)是一种常用的哈希函数算法,用于将任意长度的数据转换为固定长度的哈希值。 在小程序中使用 MD5 可以实现数据校验、加密等功能。开发者可以选择第三方的 MD5 ,并将其引入到项目中。常用的 MD5 md5.js、crypto-js 等。 引入 MD5 后,在小程序的代码中可以使用提供的函数进行 MD5 计算。通常,MD5 的使用方式如下: 1. 引入 MD5 : ``` const MD5 = require('md5.js'); ``` 2. 创建 MD5 实例: ``` const md5 = new MD5(); ``` 3. 使用 MD5 函数计算哈希值: ``` const hash = md5.update(data).digest('hex'); ``` 其中,`data` 是要计算哈希值的数据,`hash` 是计算得到的哈希值。 通过以上步骤,就可以在小程序中使用 MD5 实现相应的功能。需要注意的是,引入的第三方需要符合微信小程序的规范,且要保证代码的安全性与可靠性,以避免潜在的安全风险。在引入第三方之前,建议仔细查阅文档并评估其适用性。 ### 回答2: 微信小程序是一种在微信平台上运行的应用程序,开发者可以通过微信小程序框架进行开发。在开发微信小程序时,有时候需要使用MD5来进行数据加密或是校验,以提高数据的安全性。MD5(Message Digest Algorithm 5)是一种常见的哈希函数算法,用于产生哈希值来表示输入的数据。 在微信小程序中使用MD5需要先将该引入到小程序的代码中。开发者可以在微信小程序官方文档或者第三方开源社区中查找适合的MD5,并在小程序项目中进行集成。一般来说,需要将MD5的代码文件下载到本地,然后在小程序的代码文件中引入该。 在MD5成功引入后,开发者可以使用该中的方法进行MD5哈希计算。一般来说,需要将需要计算哈希值的数据作为输入,然后调用MD5提供的方法进行计算。计算得到的结果即为MD5哈希值。 通过使用MD5,开发者可以在微信小程序中实现数据加密或校验的功能。例如,可以将用户的敏感信息进行MD5加密后存储,确保用户的信息在存储过程中不易被泄露。同时,在与服务器通信时,可以对传输的数据进行MD5校验,确保数据的完整性和准确性。 总而言之,微信小程序中的MD5可以帮助开发者实现数据的加密和校验功能,提高数据的安全性。开发者需要先将MD5引入到小程序项目中,然后调用中的方法进行哈希计算,最终得到MD5哈希值。使用MD5可以保护用户的敏感信息和确保数据的完整性。 ### 回答3: 微信小程序是一种轻量级的应用程序,可以在微信中进行访问,与其他小程序相比,微信小程序的功能相对较少。然而,开发者可以利用一些来增强微信小程序的功能性,其中就包括md5MD5是一种加密算法,它可以将任意长度的数据转换成固定长度的哈希值,通常是32位的十六进制数。在开发中,MD5被广泛用于密码验证、文件完整性校验等场景中。 在微信小程序开发中,利用md5可以实现一些安全相关的功能。例如,可以使用md5对用户的密码进行加密处理,确保用户的密码不会明文保存在数据中。另外,md5还可以用于数据传输的校验,确保传输的数据在传输过程中没有被篡改。 要在微信小程序中使用md5,开发者需要先引入md5的代码文件,这通常是在开源社区中下载md5的源码,然后在小程序中进行使用。引入md5后,开发者可以调用md5中的函数进行相关的加密操作。 总而言之,微信小程序确实支持md5,并且开发者可以通过使用md5来实现一些安全相关的功能。尽管微信小程序相对功能有限,但有了md5的支持,开发者可以更好地保护用户的数据安全。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值