Android材质设计按钮-预棒棒糖


75

如何实现Google的材料设计指南中所述的“凸起按钮”和“扁平按钮”?


凸起的按钮为大多数平面布局增加了尺寸。他们强调在繁忙或宽敞的空间上的功能。

凸起的按钮


为工具栏和对话框使用平面按钮,以避免过多的分层。

平面按钮

来源:http//www.google.com/design/spec/components/buttons.html




也许这应该是重复的(我不清楚)。但是,这种接近的原因是错误的。
Yishai

Answers:


121

这需要Android 5.0

凸起按钮

从Widget.Material.Button继承按钮样式,然后将自动应用标准的高程和抬高动作。

<style name="Your.Button" parent="android:style/Widget.Material.Button">
    <item name="android:background">@drawable/raised_button_background</item>
</style>

然后,您需要创建一个raised_button_background.xml文件,其按钮的背景色位于涟漪标记内:

<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="?attr/colorControlHighlight">
    <item android:drawable="@color/button_color"/>
</ripple>

平面按钮

编辑:代替我以前对平面按钮的建议,您应该改用以下斯蒂芬·凯泽(Stephen Kaiser)给出的建议:

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="DONE"
    style="?android:attr/borderlessButtonStyle"
/>

编辑:如果使用支持库,则可以在Pre-Lollipop设备上实现相同的结果style="?attr/borderlessButtonStyle"。(注意缺少android:),以上示例变为

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="DONE"
    style="?attr/borderlessButtonStyle"
/>

谢谢您,对于这个迟到的答复表示抱歉。有没有一种方法可以通过支持库获得相同的结果?我从Theme.AppCompat.Light.DarkActionBar继承了主题,并且在Android Studio中可以看到凸起但想要的东西,但是当我在手机上运行该应用程序(API 17)时,我看到了通常的按钮
rickyalbert 2014年

3
有什么方法可以使棒棒糖的样式在预棒棒糖上起作用?甚至是假货?
android开发人员

2
禁用/启用状态看起来相同。如何解决?
ViliusK

2
使用材质设计时,为什么平(无边框)按钮没有拉出强调色样式?更好地使用buttonBarButtonStyle?
lostintranslation 2015年

1
@lostintranslation因为在AppCompat基本主题borderlessButtonStyle中设置为@style/Widget.AppCompat.Button.Borderless。如果希望它拉出强调色,请将borderlessButtonStyle主题中的设置为@style/Widget.AppCompat.Button.Borderless.Colored
pumppie65 '16

84

为了实现扁平按钮,您可以添加style="?android:attr/borderlessButtonStyle"

例:

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="DONE"
    style="?android:attr/borderlessButtonStyle"
    />

这是该属性的参考


3
好极了,它支持回API级别11
加布里埃尔

@StephenKaiser凸起的按钮怎么样?
Farbod Salamat-Zadeh's

4
style="@style/Widget.AppCompat.Button.Borderless"使用AppCompat库时
Michael Kazarian's

4

您可以使用MaterialDesignLibrary。它是第三方图书馆。

这是一个库,其中包含要在android 2.2中使用的Android L组件。如果要使用此库,则只需下载MaterialDesign项目,将其导入到工作区中,然后将该项目作为库添加到android项目设置中。


2

我正在研究材料兼容性库。按钮类在那里,并支持动画阴影和触摸波纹。也许您会发现它很有用。这是链接


伙计,这太棒了。如何通过gradle包括aar lib?
kiruwka

我想知道,在现实应用中使用它的稳定性如何?您是否有与按钮相关的崩溃:阴影/波纹?谢谢
kiruwka

我正在实际项目中对其进行测试,并尽我所能使其正常工作。该库正在大量开发中,我正在尝试在24小时内修复所有报告的错误。在大多数情况下,库不会崩溃,而是会产生动画故障或只是滞后。目前最大的两个问题是:1.缺少渲染线程(在Lollipop中引入)和2.与所有GPU和UI的兼容性(例如,Galaxy系列中使用的TouchWiz)。如果您还有其他问题,想提出功能或报告错误,请随时与我联系。我刚刚更新了博客上的“关于”页面,以使其更轻松。
Zielony 2015年

2

我将其用作AppCompat的按钮的背景,它描绘了一个凸起的按钮(所有n个波纹),希望能有所帮助。

myRaisedButton.xml -里面drawable的文件夹:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape xmlns:android="http://schemas.android.com/apk/res/android"
               android:shape="rectangle">
            <solid android:color="@color/yourColor"/>
            <corners android:radius="6dp"/>
        </shape>
    </item>
    <item android:drawable="?android:selectableItemBackground"/>
</layer-list>

styles.xml

<resources>

    <style name="AppTheme" parent="AppTheme.Base"/>
    <style name="AppTheme.Base" parent="Theme.AppCompat">

</resources>

styles.xml(v21)

...
<style name="AppTheme" parent="AppTheme.Base">

layout.xml

...
android:background="@drawable/myRaisedButton"

您在哪里使用此xml?在可绘制文件夹中?
rickyalbert 2014年

是的,将其命名为myRaisedButton.xml,然后使用android:background =“ @ drawable / myRaisedButton”从布局中访问它
thanosChatz 2014年

谢谢,它有效!由于出现异常,我不得不删除最后一行,该如何解决?抱歉,但是在xml中使用样式仍然有问题
rickyalbert 2014年

1
为什么将styles.xml文件都指向相同的样式(“ AppTheme.Base”)?我在这里看不到增加的功能...
android开发人员

3
此代码生成异常,并且不会创建引发按钮。
史蒂夫M

1

有关如何使用appcompat libray进行此操作的说明,请查看我对另一个问题的回答:https ://stackoverflow.com/a/27696134/1932522

这将显示如何在Android 5.0和更低版本(最高API级别11)上使用凸起和扁平按钮!


style =“?android:attr / borderlessButtonStyle”不是appCompat样式。您的答案仅适用于API> 11
Shine


0

您可能还需要在按钮上添加一个底边距,以便能够看到凸起的阴影效果:

<item name="android:layout_marginBottom">@dimen/activity_vertical_margin</item>
<item name="android:elevation">1dp</item>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.