Material Design with the Android Design Support Library
原文http://www.sitepoint.com/material-design-android-design-support-library/
Material Design,Android 5.0发布时为android app 和其他平台app引入的一门新的设计语言。
它带来了一些新的UI组件,如“Floating Action Button”。实施这些新组件,同时确保向后兼容性是通常一个繁琐的过程。第三方库通常会需要简化过程。
在今年的谷歌IO大会上,谷歌推出了Android设计支持库带来了一些重要的Material Design组件的开发。该组件是向后兼容,向后兼容到Android 2.1,并实现他们的是比以前更容易。该库包括一个抽屉式导航视图,浮动编辑文本,浮动操作按钮,Snackbar,标签和motion和滚动框架绑在一起的标签。在本教程中,我们将创建一个应用程序,展示了这些组件。
工程源码:Github https://github.com/sitepoint-editors/Design-Demo
在开始使用这些组件之前,我们将建立项目,并设置一些样式。采用Android Studio中创建一个新的Android项目。将它命名为“Material Design”并保留其他设置为默认值,保证了最低的SDK版本是在API级别15。
在 build.gradle(module:app)文件添加库依赖:
compile 'com.android.support:design:22.2.1'
compile 'com.android.support:cardview-v7:22.2.1'
第一个声明添加 design support library,第二个声音添加 CardView 库,稍候我们将用到。接下来同步更新一下project。它可能会下载一些其他的支持库。
创建文件夹 res/values下资源文件 colors.xml,内容更改如下:
<android.support.design.widget.CoordinatorLayout
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.design.widget.AppBarLayout
android:layout\_width="match\_parent"
android:layout\_height="250dp"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/collapsing\_toolbar"
android:layout\_width="match\_parent"
android:layout\_height="match\_parent"
app:contentScrim="?attr/colorPrimary"
app:layout\_scrollFlags="scroll|exitUntilCollapsed">
<ImageView
android:layout\_width="match\_parent"
android:layout\_height="match\_parent"
android:scaleType="centerCrop"
android:src="@drawable/image"
app:layout\_collapseMode="parallax"/>
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout\_width="match\_parent"
android:layout\_height="?attr/actionBarSize"
app:layout\_collapseMode="pin"></android.support.v7.widget.Toolbar>
</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:orientation="vertical"
android:paddingTop="24dp"
android:layout\_width="match\_parent"
android:layout\_height="match\_parent">
<android.support.v7.widget.CardView
android:layout\_margin="16dp"
android:layout\_width="match\_parent"
android:layout\_height="wrap\_content">
<LinearLayout
android:orientation="vertical"
android:padding="16dp"
android:layout\_width="match\_parent"
android:layout\_height="wrap\_content">
<TextView
android:layout\_width="match\_parent"
android:layout\_height="wrap\_content"
android:text="Lorem ipsum"/>
<TextView
android:layout\_width="match\_parent"
android:layout\_height="wrap\_content"
android:text="@string/second\_activity\_text"/>
</LinearLayout>
</android.support.v7.widget.CardView>
<android.support.v7.widget.CardView
android:layout\_margin="16dp"
android:layout\_width="match\_parent"
android:layout\_height="wrap\_content">
<LinearLayout
android:orientation="vertical"
android:padding="16dp"
android:layout\_width="match\_parent"
android:layout\_height="wrap\_content">
<TextView
android:layout\_width="match\_parent"
android:layout\_height="wrap\_content"
android:text="Lorem ipsum"/>
<TextView
android:layout\_width="match\_parent"
android:layout\_height="wrap\_content"
android:text="@string/second\_activity\_text"/>
</LinearLayout>
</android.support.v7.widget.CardView>
<android.support.v7.widget.CardView
android:layout\_margin="16dp"
android:layout\_width="match\_parent"
android:layout\_height="wrap\_content">
<LinearLayout
android:orientation="vertical"
android:padding="16dp"
android:layout\_width="match\_parent"
android:layout\_height="wrap\_content">
<TextView
android:layout\_width="match\_parent"
android:layout\_height="wrap\_content"
android:text="Lorem ipsum"/>
<TextView
android:layout\_width="match\_parent"
android:layout\_height="wrap\_content"
android:text="@string/second\_activity\_text"/>
</LinearLayout>
</android.support.v7.widget.CardView>
<android.support.v7.widget.CardView
android:layout\_margin="16dp"
android:layout\_width="match\_parent"
android:layout\_height="wrap\_content">
<LinearLayout
android:orientation="vertical"
android:padding="16dp"
android:layout\_width="match\_parent"
android:layout\_height="wrap\_content">
<TextView
android:layout\_width="match\_parent"
android:layout\_height="wrap\_content"
android:text="Lorem ipsum"/>
<TextView
android:layout\_width="match\_parent"
android:layout\_height="wrap\_content"
android:text="@string/second\_activity\_text"/>
</LinearLayout>
</android.support.v7.widget.CardView>
<android.support.v7.widget.CardView
android:layout\_margin="16dp"
android:layout\_width="match\_parent"
android:layout\_height="wrap\_content">
<LinearLayout
android:orientation="vertical"
android:padding="16dp"
android:layout\_width="match\_parent"
android:layout\_height="wrap\_content">
<TextView
android:layout\_width="match\_parent"
android:layout\_height="wrap\_content"
android:text="Lorem ipsum"/>
<TextView
android:layout\_width="match\_parent"
android:layout\_height="wrap\_content"
android:text="@string/second\_activity\_text"/>
</LinearLayout>
</android.support.v7.widget.CardView>
</LinearLayout>
</android.support.v4.widget.NestedScrollView>
在上文中,我们使用了CollapsingToolbarLayout,标志为 scroll和 exitUnitCollapsed,使它的子视图全部滚出屏幕,对于Toolbar,我们设置为:app:layout_collapseMode="pin" 可以确保当视图折叠时 Toolbar固定在顶部,在CollapsingToolbarLayout的标题将出现较大的时候,布局是完全可见,然后过渡到其默认大小,因为它是折叠的。我们在代码中设置此title。布局的其余部分是一个NestedScrollView包含几个CardView。
在SecondActivity.java中的onCreate(Bundle)函数添加代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
CollapsingToolbarLayout collapsingToolbar = (CollapsingToolbarLayout) findViewById(R.id.collapsing\_toolbar);
collapsingToolbar.setTitle("Second Activity");
}
这里我们为Toolbar添加向上符号和为 CollapsingToolbarLayout设置title
要使用向上符号工作,还需要在manifest文件中为SecondActivity添加标签
修改DesignDemoRecyclerAdapter.java 的onBindViewHolder()方法:
@Override
public void onBindViewHolder(ViewHolder viewHolder, int i) {
String item = mItems.get(i);
viewHolder.mTextView.setText(item);
viewHolder.mTextView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Context context = view.getContext();
context.startActivity(new Intent(context, SecondActivity.class));
}
});
}
在上文中,我们的RecyclerView的每一行上的TextView设置一个onClick监听。这不是设置RecyclerView项监听的好方式,因为如果你运行应用程序,听者的触摸目标将只包括与该行的文本的区域,而不是整个行。我这样做是在这里,因为我要的是一个方法来启动新的活动,所以我选择一个的方式来写最少的代码。
最后要介绍的一个组件是支持库里改良型的EditText,譬如它在我们输入第一个字符的时候,就会自动隐藏掉提示标签。现在你该使用 TextInputLayout 了,它会在用户开始输入之后,自动将提示标签悬浮到 EditText 上方,这样用户就永远都能知道输入内容的上下文。
为了演示这个功能,我们修改 activity_second.xml布局文件的第二个CardView的第一个TextView为 EditText.
<EditText
android:layout\_width="match\_parent"
android:layout\_height="wrap\_content"
android:inputType="textEmailAddress"
android:hint="Email" />
</android.support.design.widget.TextInputLayout>
运行程序,提示文件将浮现在EditView的上面
你还可以通过设置EditView的setError()函数来为EditView显示一个”错误信息”。
手机扫一扫
移动阅读更方便
你可能感兴趣的文章