有关Material Design新特性的详解。

源码地址:https://github.com/chrisbanes/cheesesquare

自己添加备注后的地址:https://github.com/heinika/DrawerLayoutDemo

英文教程:https://guides.codepath.com/android/Handling-Scrolls-with-CoordinatorLayout

中文教程:http://my.oschina.net/kooeasy/blog/484593

主要包含:

DrawerLayout
NavigationView
CoordinatorLayout
AppBarLayout
Toolbar
TabLayout
ViewPager
FloatingActionButton
CollapsingToolbarLayout
NestedScrollView
CardView
RecyclerView
具体使用:
<?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"    xmlns:app="http://schemas.android.com/apk/res-auto"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:fitsSystemWindows="true"    android:id="@+id/drawer_layout"    tools:context=".MainActivity">    <!--DrawerLayout里的第一个为 content -->    <include layout="@layout/include_list_viewpager" />

<!--DrawerLayout里的第二个为drawer     headerLayout为标题的布局     menu为list的配置文件     颜色都是从主题中提取的,可用如下属性改变     app:itemIconTint=""     app:itemBackground=""     app:itemTextColor=""     -->    <android.support.design.widget.NavigationView        android:id="@+id/nav_view"        android:layout_width="wrap_content"        android:layout_height="match_parent"        android:layout_gravity="start"        android:fitsSystemWindows="true"        app:headerLayout="@layout/nav_header"        app:menu="@menu/drawer_view"        >

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

public class MainActivity extends AppCompatActivity {

private DrawerLayout mDrawerLayout;

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

//设置actionbar        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);        setSupportActionBar(toolbar);        //设置actionbar的图片并设置为可点击        final ActionBar ab = getSupportActionBar();        ab.setHomeAsUpIndicator(R.drawable.ic_menu);        ab.setDisplayHomeAsUpEnabled(true);

mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);

//drawer菜单        NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);        if (navigationView != null) {            //设置菜单可选择,并且选择后关闭            setupDrawerContent(navigationView);        }

//设置ViewPager        ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);        if (viewPager != null) {            setupViewPager(viewPager);        }

//设置tablayout,viewpager上的标题        TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);        tabLayout.setupWithViewPager(viewPager);        tabLayout.setSelectedTabIndicatorColor(getResources().getColor(R.color.colorPrimaryDark));  //设置tab下方颜色        //设置点击对勾后,触发的提示        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);        fab.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                Snackbar.make(view, "Here‘s a Snackbar", Snackbar.LENGTH_LONG)                        .setAction("Action", null).show();            }        });    }

//设置点击图标拉出抽屉    @Override    public boolean onOptionsItemSelected(MenuItem item) {        switch (item.getItemId()) {            case android.R.id.home:                mDrawerLayout.openDrawer(GravityCompat.START);   //设置打开的方向                return true;        }        return super.onOptionsItemSelected(item);    }

//actionbar省略号的设置    @Override    public boolean onCreateOptionsMenu(Menu menu) {        getMenuInflater().inflate(R.menu.sample_actions, menu);        return true;    }

/**     * 设置菜单可选择,并且选择后关闭     * @param navigationView drawer菜单     */    private void setupDrawerContent(NavigationView navigationView) {        navigationView.setNavigationItemSelectedListener(                new NavigationView.OnNavigationItemSelectedListener() {                    @Override                    public boolean onNavigationItemSelected(MenuItem menuItem) {                        menuItem.setChecked(true);                        mDrawerLayout.closeDrawers();                        return true;                    }                });    }

/**     * 设置item     * @param viewPager     */    private void setupViewPager(ViewPager viewPager) {        Adapter adapter = new Adapter(getSupportFragmentManager());        adapter.addFragment(new CheeseListFragment(), "Category 1");        adapter.addFragment(new CheeseListFragment(), "Category 2");        adapter.addFragment(new CheeseListFragment(), "Category 3");        viewPager.setAdapter(adapter);    }

//自定义adapter    static class Adapter extends FragmentPagerAdapter {        private final List<Fragment> mFragments = new ArrayList<>();        private final List<String> mFragmentTitles = new ArrayList<>();

public Adapter(FragmentManager fm) {            super(fm);        }

public void addFragment(Fragment fragment, String title) {            mFragments.add(fragment);            mFragmentTitles.add(title);

}

@Override        public Fragment getItem(int position) {            return mFragments.get(position);        }

@Override        public int getCount() {            return mFragments.size();        }

@Override        public CharSequence getPageTitle(int position) {            return mFragmentTitles.get(position);        }    }}
<?xml version="1.0" encoding="utf-8"?><!--  ~ Copyright (C) 2015 The Android Open Source Project  ~  ~ Licensed under the Apache License, Version 2.0 (the "License");  ~ you may not use this file except in compliance with the License.  ~ You may obtain a copy of the License at  ~  ~      http://www.apache.org/licenses/LICENSE-2.0  ~  ~ Unless required by applicable law or agreed to in writing, software  ~ distributed under the License is distributed on an "AS IS" BASIS,  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  ~ See the License for the specific language governing permissions and  ~ limitations under the License.--><android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    android:id="@+id/main_content"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:fitsSystemWindows="true">

<android.support.design.widget.AppBarLayout        android:id="@+id/appbar"        android:layout_width="match_parent"        android:layout_height="@dimen/detail_backdrop_height"        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"        android:fitsSystemWindows="true">

<android.support.design.widget.CollapsingToolbarLayout            android:id="@+id/collapsing_toolbar"            android:layout_width="match_parent"            android:layout_height="match_parent"            app:layout_scrollFlags="scroll|exitUntilCollapsed"            android:fitsSystemWindows="true"            app:contentScrim="?attr/colorPrimary"            app:expandedTitleMarginStart="48dp"            app:expandedTitleMarginEnd="64dp">            <!-- 设置图片-->            <!--添加一个定义了app:layout_collapseMode="parallax" 属性的ImageView,出现和消失会有过度-->            <ImageView                android:id="@+id/backdrop"                android:layout_width="match_parent"                android:layout_height="match_parent"                android:scaleType="centerCrop"                android:fitsSystemWindows="true"                app:layout_collapseMode="parallax" />            <!-- 设置标题-->            <android.support.v7.widget.Toolbar                android:id="@+id/toolbar"                android:layout_width="match_parent"                android:layout_height="?attr/actionBarSize"                app:popupTheme="@style/ThemeOverlay.AppCompat.Light"                app:layout_collapseMode="pin" />

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

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

<android.support.v4.widget.NestedScrollView        android:layout_width="match_parent"        android:layout_height="match_parent"        app:layout_behavior="@string/appbar_scrolling_view_behavior">

<LinearLayout            android:layout_width="match_parent"            android:layout_height="match_parent"            android:orientation="vertical"            android:paddingTop="24dp">

<android.support.v7.widget.CardView                android:layout_width="match_parent"                android:layout_height="wrap_content"                android:layout_margin="@dimen/card_margin">

<LinearLayout                    style="@style/Widget.CardContent"                    android:layout_width="match_parent"                    android:layout_height="wrap_content">

<TextView                        android:layout_width="match_parent"                        android:layout_height="wrap_content"                        android:text="Info"                        android:textAppearance="@style/TextAppearance.AppCompat.Title" />

<TextView                        android:layout_width="match_parent"                        android:layout_height="wrap_content"                        android:text="@string/cheese_ipsum" />

</LinearLayout>

</android.support.v7.widget.CardView>

<android.support.v7.widget.CardView                android:layout_width="match_parent"                android:layout_height="wrap_content"                android:layout_marginBottom="@dimen/card_margin"                android:layout_marginLeft="@dimen/card_margin"                android:layout_marginRight="@dimen/card_margin">

<LinearLayout                    style="@style/Widget.CardContent"                    android:layout_width="match_parent"                    android:layout_height="wrap_content">

<TextView                        android:layout_width="match_parent"                        android:layout_height="wrap_content"                        android:text="Friends"                        android:textAppearance="@style/TextAppearance.AppCompat.Title" />

<TextView                        android:layout_width="match_parent"                        android:layout_height="wrap_content"                        android:text="@string/cheese_ipsum" />

</LinearLayout>

</android.support.v7.widget.CardView>

<android.support.v7.widget.CardView                android:layout_width="match_parent"                android:layout_height="wrap_content"                android:layout_marginBottom="@dimen/card_margin"                android:layout_marginLeft="@dimen/card_margin"                android:layout_marginRight="@dimen/card_margin">

<LinearLayout                    style="@style/Widget.CardContent"                    android:layout_width="match_parent"                    android:layout_height="wrap_content">

<TextView                        android:layout_width="match_parent"                        android:layout_height="wrap_content"                        android:text="Related"                        android:textAppearance="@style/TextAppearance.AppCompat.Title" />

<TextView                        android:layout_width="match_parent"                        android:layout_height="wrap_content"                        android:text="@string/cheese_ipsum" />

</LinearLayout>

</android.support.v7.widget.CardView>

</LinearLayout>

</android.support.v4.widget.NestedScrollView>

<!--app:layout_anchor="@id/appbar" 固定到appbar上 -->    <android.support.design.widget.FloatingActionButton        android:layout_height="wrap_content"        android:layout_width="wrap_content"        app:layout_anchor="@id/appbar"        app:layout_anchorGravity="bottom|right|end"        android:src="@drawable/ic_discuss"        android:layout_margin="@dimen/fab_margin"        android:clickable="true"/>

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

public class CheeseDetailActivity extends AppCompatActivity {

public static final String EXTRA_NAME = "cheese_name";

@Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_detail);

Intent intent = getIntent();        final String cheeseName = intent.getStringExtra(EXTRA_NAME);

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

CollapsingToolbarLayout collapsingToolbar =                (CollapsingToolbarLayout) findViewById(R.id.collapsing_toolbar);        /**         * 设置CollapsingToolbarLayout的标题文字         */        collapsingToolbar.setTitle(cheeseName);        //设置CollapsingToolbarLayout的背景图        loadBackdrop();    }

/**     * 设置CollapsingToolbarLayout的图片     */    private void loadBackdrop() {        final ImageView imageView = (ImageView) findViewById(R.id.backdrop);        Glide.with(this).load(Cheeses.getRandomCheeseDrawable()).centerCrop().into(imageView);    }

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

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-06 14:18:17

有关Material Design新特性的详解。的相关文章

Android Material Design 系列之 SnackBar详解

SnackBar是google Material Design提供的一种轻量级反馈组件.支持从布局的底部显示一个简洁的提示信息,支持手动滑动取消操作,同时在同一个时间内只能显示一个SnackBar. 那Snackbar是如何实现的呢?我们主要讨论Snackbar的显示逻辑,包括:延迟消失和同一时间只支持一个Snackbar显示 首先我们先看下Snackbar用到的两个类 p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "PingFang

HTML5新特性及详解

什么是HTML5:HTML5 是下一代的HTML,将成为 HTML.XHTML 以及 HTML DOM 的新标准. 为 HTML5 建立的一些规则: 新特性应该基于 HTML.CSS.DOM 以及 JavaScript. 减少对外部插件的需求(比如 Flash) 更优秀的错误处理 更多取代脚本的标记 HTML5 应该独立于设备 开发进程应对公众透明 HTML5 中的一些有趣的新特性: 用于绘画的 canvas 元素 用于媒介回放的 video 和 audio 元素 对本地离线存储的更好的支持 新

Php5.5新特性 Generators详解

在**PHP5.5.0**版本中,新增了生成器*(Generators)*特性,用于简化实现迭代器接口*(Iterator)*创建简单的迭代器的复杂性. 通过生成器,我们可以轻松的使用foreach迭代一系列的数据,而不需要事先在内存中构建要被迭代的对象,大大减少了内存开销. 当生成器函数被调用的时候,它会返回一个可迭代的对象,当对该对象进行迭代的时候,PHP将会在需要的时候调用生成器函数,并且在生成器使用新增的关键字yield产生一个新的值的时候,保存迭代器内部的状态.迭代器没有新的值需要产生

C#3.0新特性&mdash;&mdash;委托详解

前言   委托的定义 委托的本质:函数指针.让方法作为变量一样传递. 定义:委托是一种类型安全的函数回调机制, 它不仅能够调用实例方法,也能调用静态方法,并且具备按顺序执行多个方法的能力. 也就是说,委托可以在程序运行时调用不同方法函数,只要这个方法签名和委托签名保持一致.与函数指针不同的是,委托是类型安全的.所谓类型安全,是指在编译时编译器会检测委托对象的签名是否委托声明一致. using System; using System.Collections.Generic; using Syst

Android Design Support Library使用详解

Android Design Support Library使用详解 Google在2015的IO大会上,给我们带来了更加详细的Material Design设计规范,同时,也给我们带来了全新的Android Design Support Library,在这个support库里面,Google给我们提供了更加规范的MD设计风格的控件.最重要的是,Android Design Support Library的兼容性更广,直接可以向下兼容到Android 2.2.这不得不说是一个良心之作. 使用S

ios新特征 ARC详解

IOS ARC 分类: IOS ARC2013-01-17 09:16 2069人阅读 评论(0) 收藏 举报 目录(?)[+] 关闭工程的ARC(Automatic Reference Counting) 顺带附上ARC教程 本文部分实例取自iOS 5 Toturail一书中关于ARC的教程和公开内容,仅用于技术交流和讨论.请不要将本文的部分或全部内容用于商用,谢谢合作. 欢迎转载本文,但是转载请注明本文出处:http://www.onevcat.com/2012/06/arc-hand-by

新辰:详解首页被K后SEOer必做的三大排除方法!

近段时间,有很多朋友向新辰抱怨说出大问题了,为神马site不到首页了,而且收录变成了0?唉,新辰不得不很同情的告诉你:你的首页真的被K了!好了,作为一个职业SEOer,面对被K犹如已经看破红尘般没了脾气,所以,废话少说,身为SEOer的你赶紧补救吧!希望新辰的这些方法能够帮助你早日逃离拔毛的痛苦哦: 所谓治病先察言观色,后开方救人,新辰说的就是先找准病因,才能给出解决的办法.面对突然site不到首页的情况,请先保持冷静哦,然后需要先查看一下收录和排名怎么样了,索引量如何,蜘蛛日志的返回代码是多少

Android Material Design新UI控件使用大全 一

序言 自从谷歌在2014年的IO大会上推出了Material Design新的设计规范后,安卓应用的整体美观程度提升了很大的一个层次, 安卓再也不是又黑又丑的界面,取而代之的是拥有丰富的颜色,美观的按钮,好的用户体验;但是刚开始的话这种设计规范只能在Android 5.0以上的手机上运行,导致开发者也只是自己去体验,在国内并没有大范围的推广,App的质量并不能大幅度的提升,但是作为改变世界的Google公司不久就推出了兼容库Android Material Design,这绝对是业界良心了,我们

Android进阶——Material Design新控件之初识TabLayout(一)

引言 Google I/O 2015 推出的 Android Design Support Library令人非常激动.Material Design的推出确实振奋了不少 Android开发者以及用户的心.以前Google给我的感觉就像是他并没太在乎他们的UI(或者审美不同,Gmail不忍吐槽),但是当Material Design伴随Android5.0发布之后,一切好像就都变了个样,Google好像意识到了设计的重要性以及自己以往的种种不足,决定也要迎头赶上,不仅仅只是推出一套Materia