从无边框按钮

时间:2017-09-27 12:06:23

标签: android android-styles

我有这个按钮:

<Button
    android:id="@+id/btn_action"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentEnd="true"
    android:layout_alignParentRight="true"
    android:theme="@style/AppTheme.Button.Toolbar"/>

这种风格:

<style name="AppTheme.Button.Toolbar" parent="Widget.AppCompat.Button.Borderless">
    <item name="colorButtonNormal">@color/main</item>
    <item name="android:textColor">@color/secondary</item>
</style>

即使样式继承自Widget.AppCompat.Button.Borderless,该按钮仍有边框。

Button更改为android.support.v7.widget.AppCompatButton没有帮助。

如何删除边框?

修改

设置按钮的背景不是一个选项 - 通过这样做,涟漪效果的动画就会丢失。

编辑2:

事情变得更加有趣。

尝试将android:theme更改为style,因为@cadet建议。

按钮以这种方式定义:

<Button
    android:id="@+id/btn_action"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentEnd="true"
    android:layout_alignParentRight="true"
    android:theme="@style/ToolbarButton"/>

这就是我得到的:

enter image description here

颜色适用,但有明显的边界。

如果我只是将主题更改为样式:

<Button
    android:id="@+id/btn_action"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentEnd="true"
    android:layout_alignParentRight="true"
    style="@style/ToolbarButton"/>

我明白了:

enter image description here

没有边框,并且样式仅部分应用(文本为彩色,按钮不是)

编辑3:

朋友们,我正在寻找一种方法,使用样式方法获得带有涟漪效果的无边框,样式按钮。在布局文件中分别黑客攻击每个按钮可能会有效,但这不是重点。

4 个答案:

答案 0 :(得分:0)

试试这个,希望这个可以帮到你

<Button
    android:id="@+id/btn_photo_lib"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:onClick="startPhotoLibAction"
    android:src="@drawable/library_blau_2"
    style="?android:attr/borderlessButtonStyle"/>

android:background="@null"

答案 1 :(得分:0)

设置背景@null。或设置自己创建的背景

android:background="@null"

答案 2 :(得分:0)

您可以使用其他视图而不是按钮

<LinearLayout
android:id="@+id/btn_action_alternative"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:clickable="true" />

答案 3 :(得分:0)

我找到了一个更好的解决方案,你想创建一个自定义drawable,并根据你的应用程序支持的最小版本,你需要创建两个,一个用于Android版本21之前(Lollipop)和另一个用于post 21 (棒糖)。这两个文件需要以相同的名称命名,以便Android可以找到它们并根据API级别适当地匹配它们。但是在API 21及更高版本的文件可绘制文件中,您的文件应如下所示:

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
      android:color="?android:colorControlHighlight">
      <item android:drawable="@drawable/button_normal"/>
</ripple>

这个Drawable文件正在包装另一个Drawable,它是你喜欢的背景图像或颜色,带有一个涟漪,其颜色是用“?android:colorControlHighlight”定义的,这是一个简单的参考默认颜色,来自当前活动的主题。使用

如果您需要支持21之前(棒棒糖),您的可绘制文件将只是一个选择器,具有首选的drawable。您首选的drawable应该是相同的背景颜色,甚至是透明的颜色,以确保您可以看到您的父布局背景颜色。与此类似:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
      <item android:drawable="@drawable/button_normal"/>
</selector>

你可以将它与一个样式结合起来,以便将无边框样式应用到布局中所有按钮的所有按钮...我建议你使用透明drawable,这样你就可以使用这个样式与所有按钮,无论他们的父母是否有不同的颜色背景。这将阻止您制作具有不同背景的多个主题。

要处理版本控制支持,甚至配置支持,如果您想要基于各种设备配置的自定义绘图,您只需创建几个具有配置特定后缀的可绘制文件夹。因此,例如,仅适用于版本21及更高版本的drawable,您将创建一个名为'drawable-21'的文件夹。

我发现website可以更好地解释我在说什么。