【问题标题】:How to make a pill shaped button in android?如何在android中制作药丸形按钮?
【发布时间】:2014-08-08 19:36:15
【问题描述】:

我不知道该怎么称呼它……也许是药丸状的。谷歌搜索圆角会发现很多人想要一个带圆角的矩形按钮。这有点不同,但更像是我尝试将其绘制成的 2 个圆圈和一个矩形。

我想通过在 android 上使用 xml 可绘制背景制作一个类似于下面第一张图片的按钮,但其中包含文本和图标图片:

我试过这个,看起来不错,但是如果按钮长度不同,它就不会缩放,你最终会得到一个矩形和一些其他奇怪的东西。

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:left="40dp" android:top="0dp" android:bottom="0dp">

        <shape android:shape="oval" >
            <solid android:color="#666666"/>
            <size android:width="40dp" android:height="40dp"></size>

        </shape>

    </item>

    <item android:left="20dp" android:right="20dp">
        <shape android:shape="rectangle" >
            <solid android:color="#666666"/>
            <size android:width="20dp" android:height="20dp"></size>
        </shape>


    </item>

    <item android:right="40dp">
        <shape android:shape="oval" >
            <solid android:color="#666666"/>
            <size android:width="40dp" android:height="40dp"></size>

        </shape>

    </item>


</layer-list>

我也尝试过像这样创建我的 xml 可绘制对象:

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
            <solid android:color="#666666" />

            <corners android:radius="20dp"/>
            <size android:height="20dp" android:width="60dp"></size>
        </shape>

看起来像这样:

我查看了this persons example,但是当我按照他的方式进行操作时,我的结果并没有完全圆润。它们更像上面的第二张图片。

【问题讨论】:

  • 你试过弄乱你的半径值吗?这就是外观的决定因素。
  • 我知道您想使用 xml 来创建您的按钮,但我认为正确的方法是使用 NinePatch 图像。
  • 你能把第二个的整个xml贴出来吗
  • @twhite 是的,请参阅第二个 xml 块。
  • @Larry 我宁愿不使用九个补丁。

标签: android button user-interface android-drawable


【解决方案1】:

您可以尝试将以下代码保存到可绘制对象中(例如 pill_bg.xml):

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:dither="true"
    android:shape="rectangle">

    <corners android:radius="120dp" />

    <solid android:color="@color/white" />

    <stroke
        android:width="1dp"
        android:color="#efefef" />

    <size
        android:width="300dp"
        android:height="120dp" />

</shape>

看看尺寸部分和半径。然后将 drawable 应用到您的视图中,例如:

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="250dp"
    android:layout_height="60dp"
    android:background="@drawable/pill_bg" />

如您所见,您的视图可以有不同的大小,背景会被缩放。

【讨论】:

  • 如何在多个屏幕上支持此功能?什么是多屏幕上的 60dp?请记住,我们必须支持多个屏幕。我无法对 dp 中的大小进行手动编码。我必须支持平板电脑、电视、手表、手机上的小屏幕,以及新手机上令人眼花缭乱的高分辨率 OLED 屏幕。 T_T
  • 最好将&lt;size&gt; 属性设置为最小高度和宽度(例如24dp),这样形状就可以从该点放大。缩小尺寸以适应视图要困难得多,但如果将其用作 TextView 或 Button 的背景,则自动放大以适应视图。
【解决方案2】:

v1.1.0-beta01 of the Material Components Android library 开始,您可以使用MaterialButtonshapeAppearance 样式轻松定义药丸按钮,无需您事先知道按钮的高度或依靠猜测足够高的半径值走到按钮侧面的一半。

像这样简单地定义一个样式:

<style name="PillShapeAppearance">
    <item name="cornerFamily">rounded</item>
    <item name="cornerSize">50%</item>
</style>

并将其设置在您的 MaterialButton 上,如下所示:

<com.google.android.material.button.MaterialButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        ...
        app:shapeAppearanceOverlay="@style/PillShapeAppearance"
        />

我看过的所有其他答案都忽略了关键是使用百分比值设置cornerSize,以便正确应用它支持的小数值。

【讨论】:

  • 我发现这个解决方案非常有用。它对我来说效果很好,我推荐它。
【解决方案3】:

这会针对任何视图背景正确调整大小。

<shape xmlns:android="http://schemas.android.com/apk/res/android"
       android:shape="rectangle">

    <corners android:radius="1000dp" />

    <solid android:color="@android:color/holo_red_dark" />
</shape>

【讨论】:

    【解决方案4】:

    你可以在任何设计程序中制作那个按钮,也可以制作一个类似的让它看起来像被按下然后你制作一个可绘制的选择器并将它分配给按钮背景。这就是我制作非常棒的按钮的方式

    【讨论】:

    • 我问的是如何在 xml 中绘制它,而不是一般如何绘制。我知道我可以创建一个九个补丁,但是如果我可以在我询问的 xml 中做到这一点,为什么要这样做。
    • 为什么?一个很好的理由是因为你不知道如何在 xml 上制作它,也许你很着急。另一个很好的原因是您对要显示的可绘制对象有更细粒度的控制,或者您可能想创建非常好的可绘制对象以对用户产生影响。选择适合你的东西
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-22
    • 2012-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-17
    相关资源
    最近更新 更多