在上一篇文章中,我们使用appcompat包为我们的RSS阅读器app做了配色方案。在这篇文章中,我们要看一下我们的文本样式,也要看一下CardView。
只做了很少的宣传(指的是Lollipop,而不是Material design本身)的Lollipop的Material主题和appcompat包中介绍了一些预定义的文本样式。我们可以从预定义的样式中选择最恰当的来支持我们的想法,并且在不同的app中保持文本样式的一致性。这些样式的细节在Material Design Style reference(Material设计模式引用)。
实际上,应用这些文本样式很简单。在Lollipop中,许多TextAppearance样式都再android.R.style.TextAppearance.Material.*里,这些都相当于 Material Style风格的引用。使用appcompat也是很容易的——我们可以使用在R.style.TextAppearance.AppCompat.*里的样式来替代上面的:
我们也需要在res/layout/feed_detail.xml,做同样的事,但是我不想把它列在这,变化基本是一样的。
下一件要考虑的事是在我们的布局文件中使用CardView 。CardView 是一个已经发布了兼容包的功能组件,使用它可以很容易的在我们的app里包含进Material cards。cardview兼容包定义了一个新的必不可少的CardView组件,该组件和FrameLayout(实际上它是FrameLayout的子类)做一样的事并且会渲染一个card-like大纲。
兼容包会针对主系统的特点使用适用的控件——在Lollipop上阴影将使用正在研制的算法来渲染,但是在Lollipop之前的设备drawables控件将使用阴影特效来创建。支持阴影绘制的Lollipop上会有更好的用户体验,但在之前的旧设备上看起来也不赖。
在2014的Droidcon London上,Nick Butcher 和 Chris Banes在他们的Papercraft讨论中说,不要 over cardify 应用——只在适合的地方使用卡片。在这个项目里,我觉得为我们的Listview使用卡片是不合适的,因为这些单独的ListView条目本质上都是一种类型的数据。然而,在详细视图他有一个头部区(header section),还有一个body去包含WebView里的整篇文章,这些区域就可以拆分作为卡片。
首先,我们需要添加cardview包到我们的依赖关系里:
apply plugin: 'com.android.application'
android {
compileSdkVersion 21
buildToolsVersion "21.1.1"
defaultConfig {
applicationId "com.stylingandroid.materialrss"
minSdkVersion 14
targetSdkVersion 21
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile 'com.mcxiaoke.volley:library:1.0.7'
compile "com.android.support:appcompat-v7:21.0.0"
compile "com.android.support:cardview-v7:21.0.0"
}
apply from: "${project(':').projectDir}/config/static_analysis.gradle"
然后把布局文件里已经存在的代码包含进CardView容器里: