谷歌展示了一些在Lollipop上显示按钮的好方法。
我说的是凸起和扁平的按钮。
除了特殊效果(涟漪等),我如何在Lollipop前的版本中模仿它们?
我说的是这个和这个。
当然,在Lollipop及以上,我想使用特效。
我知道已经有很多(甚至很多)关于这个的帖子,但是我没有看到任何试图完全模仿它的帖子。
我使用达到同样的效果,
android:background="@android:drawable/dialog_holo_light_frame"
我测试的输出:
将compat库添加到应用程序中。(最新版本可在此处找到。)通过在构建中添加依赖项来实现这一点。gradle文件:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:21.0.3'
}
在样式中取消应用主题。位于values目录中的xml文件:
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/theme_primary</item>
<item name="colorAccent">@color/theme_accent_1</item>
<item name="actionMenuTextColor">@color/theme_text</item>
</style>
</resources>
在清单中将声明的样式设置为应用程序使用的样式。xml文件:
<application
android:icon="@drawable/ic_launcher"
android:theme="@style/AppTheme"/>
在布局中声明一个凸起的按钮,如下所示
<Button
android:id="@+id/addButton"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:text="@string/title_add" />
声明平面按钮样式,如下所示:
<Button
android:id="@+id/okbutton"
style="?android:attr/borderlessButtonStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@android:string/ok" />
在4.4(手机)和5.0(平板电脑)设备上的结果:
有关详细信息,请参见官方文件:http://developer.android.com/training/material/theme.html
更新的答案:建议你依靠谷歌的appcompat库将材料设计风格向后移植到你的应用程序中。它似乎不再支持凸起的按钮(而是使用平面按钮),但仍然充分支持与材质设计风格相匹配的按钮。我建议你采用这种方法。
如果您仍然希望取消凸起按钮效果,则需要依赖第三方材料设计库,或者您可以使用cardwiew
查看我下面的旧解决方案,并实现自己的解决方案。
要使用Google的官方Materials Design反向端口设置appcompat库:
compile "com.android.support:appcompat-v7:+"
然后您需要在您的styles.xml
文件中设置您的应用程序主题。
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
而在你的AndroidManifest.xml
确保上面的主题设置正确:
<application
android:allowBackup="false"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="false"
android:theme="@style/AppTheme">
完成上述设置后,确保所有的活动
都从AppCompatActivity
扩展,并且从那里开始,所有的按钮
都将以材料设计风格充气。
如果在项目中使用自定义的按钮
实现,请确保扩展按钮
,而不是扩展按钮
。这适用于大多数自定义的视图
s:appcompatedtextview
,appcompatedtext
,等等。。。
它是如何工作的?所有的Android xml布局都使用了一种叫做LayoutInflater
的东西。LayoutInflater
由活动
提供,并且可以选择向其提供LayoutInflaterFactory
,以便您可以覆盖标准Android小部件的默认实现,例如按钮
和文本视图
。当你使用appcompativity
时,它会为你提供一个非标准的LayoutInflater
,这会增加支持材质设计的小部件的特殊实例!
-------------------------------------------------旧答案:-------------------------------------------------
因此,Android为我们提供了CardView来复制此类行为。它提供了一个带有圆角的视图,应用了一个阴影。您可能还想看看#setCardUpation()方法。
您可以将CardView库添加到Gradle项目中:
compile 'com.android.support:cardview-v7:+'
如果可用,CardView将使用Lollipop实现来执行此操作(因为Lollipop阴影更好),否则它将尽可能地复制它。
以下是一个示例:
<android.support.v7.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
card_view:cardBackgroundColor="#ffd9d9d9"
card_view:cardCornerRadius="2dp"
android:layout_margin="6dp"
card_view:cardElevation="6dp">
<TextView android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="8.5dp"
android:paddingBottom="8.5dp"
android:paddingLeft="12dp"
android:paddingRight="12dp"
android:textColor="#de000000"
android:fontFamily="sans-serif-medium"
android:text="NORMAL" />
</android.support.v7.widget.CardView>
看起来字体之间存在差异,因为sans serif介质的字体权重不同,或者4.4.4不支持,但这可以通过包含最新版本的Roboto并覆盖文本视图上的字体轻松解决。
您发布的材料留档指向一个"高架按钮"。CardView的是我们制作"高架"任何东西的方式。
如何实现谷歌材料设计指南中描述的“凸起按钮”和“扁平按钮”? 凸起的按钮为大多数平面布局增加了维度。他们强调 在工具栏和对话框中使用平面按钮,以避免过度分层。 资料来源:http://www.google.com/design/spec/components/buttons.html
我对材料设计的纽扣样式感到困惑。我想要得到彩色凸起的按钮,像在附加的链接。,像“强制停止”和“卸载”按钮下看到的用法部分。是否有可用的样式或我需要定义它们? http://www.google.com/design/spec/components/buttons.html#按钮-用法 我找不到默认按钮样式。 示例: 如果我尝试通过添加 所有的样式都消失了,如触摸动画,阴影,圆角等。
尝试为密码显示/隐藏功能创建角度指令。“显示/隐藏”可以工作,但是当尝试使用材质设计(mat)按钮时,它不会显示mat按钮,而是显示默认的html按钮。在我的指令中 在应用程序中。组成部分html我确实有一些按钮作为测试,所以我知道mat正在工作。 我的问题是使用一个使用innerHTML的指令如何让材质设计按钮工作? 谢谢
我刚刚开始在工作中使用角材料。但是我立即击中了令我困惑的东西——希望我有错误的一端。要样式化一个按钮,你似乎必须添加一个属性,而不是一个类。 有没有办法通过css类来实现这一点?如果没有,那么如果你建立了一个大型复杂的网站,使用了大量的mat-risted按钮,并且客户决定他们想要mat-stroked按钮,那么你必须更改每个按钮实例吗?常规的css/HTML按钮在这里肯定有优势,因为您可以将一个
我一直在寻找一种方法来获得一个“凸起”圆角矩形按钮,而不是完全自己使用背景和自定义视图。我想要这样的纽扣: 我以为这样就可以了: 但这没什么用。按钮看起来一样。WTF? 是的,我用的是最新的SDK等等。 编辑:所以我添加了一个translationz。现在,一个阴影在活动打开时出现,但在动画完成时消失。???