当前位置: 首页 > 知识库问答 >
问题:

如何模仿材质设计凸起按钮样式,即使是Lollipop之前(减去特效)?

钱欣悦
2023-03-14

谷歌展示了一些在Lollipop上显示按钮的好方法

我说的是凸起和扁平的按钮。

除了特殊效果(涟漪等),我如何在Lollipop前的版本中模仿它们?

我说的是这个和这个。

当然,在Lollipop及以上,我想使用特效。

我知道已经有很多(甚至很多)关于这个的帖子,但是我没有看到任何试图完全模仿它的帖子。

共有3个答案

越英范
2023-03-14

我使用达到同样的效果,

  android:background="@android:drawable/dialog_holo_light_frame"

我测试的输出:

薄伟彦
2023-03-14

将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

何华灿
2023-03-14

更新的答案:建议你依靠谷歌的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:appcompatedtextviewappcompatedtext,等等。。。

它是如何工作的?所有的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。现在,一个阴影在活动打开时出现,但在动画完成时消失。???