自定义圆形按钮

时间:2012-03-27 06:11:35

标签: android

我想创建自定义按钮,我需要它是圆形。如何创建圆形按钮? 我不认为使用draw9patch是可能的。

另外我不知道如何制作自定义按钮!

你有什么建议吗?

11 个答案:

答案 0 :(得分:314)

像这样使用xml drawable:

将以下内容保存为round_button.xml文件夹

中的drawable
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="false">
        <shape android:shape="oval">
            <solid android:color="#fa09ad"/>
        </shape>
    </item>
    <item android:state_pressed="true">
        <shape android:shape="oval">
            <solid android:color="#c20586"/>
        </shape>
    </item>
</selector>

Android素材效果虽然FloatingActionButton是更好的选择,但如果您想使用xml选择器执行此操作,请在drawable-v21中创建一个文件夹res,使用以下xml

保存另一个round_button.xml
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="#c20586">
    <item>
        <shape android:shape="oval">
            <solid android:color="#fa09ad"/>
        </shape>
    </item>
</ripple>

并在xml中将其设置为Button的背景,如下所示:

<Button
android:layout_width="50dp"
android:layout_height="50dp"
android:background="@drawable/round_button"
android:gravity="center_vertical|center_horizontal"
android:text="hello"
android:textColor="#fff" />

重要:

  1. 如果您希望它显示所有这些状态(启用,禁用,突出显示等),您将使用选择器described here
  2. 您必须保留这两个文件才能使drawable向后兼容。否则,你将在之前的Android版本中遇到奇怪的例外。

答案 1 :(得分:64)

Markushi写了一个带有惊人效果的圆形按钮小部件。点击here

enter image description here

答案 2 :(得分:20)

AngryTool for custom android button

您可以使用此工具网站制作任何类型的自定义Android按钮... 我使用这个工具制作圆角和方形按钮。 访问它可能是我会帮助你

答案 3 :(得分:3)

通过官方的材料组件库,您可以使用MaterialButton来应用Widget.MaterialComponents.Button.Icon样式。

类似的东西:

   <com.google.android.material.button.MaterialButton
            android:layout_width="48dp"
            android:layout_height="48dp"
            style="@style/Widget.MaterialComponents.Button.Icon"
            app:icon="@drawable/ic_add"
            app:iconSize="24dp"
            app:iconPadding="0dp"
            android:insetLeft="0dp"
            android:insetTop="0dp"
            android:insetRight="0dp"
            android:insetBottom="0dp"
            app:shapeAppearanceOverlay="@style/ShapeAppearanceOverlay.MyApp.Button.Rounded"
            />

当前需要app:iconPadding="0dp"android:insetLeftandroid:insetTopandroid:insetRightandroid:insetBottom属性来将图标置于按钮中央,以避免多余的填充空间。 / p>

使用app:shapeAppearanceOverlay属性获得圆角。在这种情况下,您将有一个圆圈。

  <style name="ShapeAppearanceOverlay.MyApp.Button.Rounded" parent="">
    <item name="cornerFamily">rounded</item>
    <item name="cornerSize">50%</item>
  </style>

最终结果:

enter image description here

答案 4 :(得分:2)

对于FAB外观按钮,MaterialButton上应使用以下样式:

<com.google.android.material.button.MaterialButton
    style="@style/Widget.MaterialComponents.ExtendedFloatingActionButton"
    app:cornerRadius="28dp"
    android:layout_width="56dp"
    android:layout_height="56dp"
    android:text="1" />

结果:

enter image description here

如果更改尺寸,请小心使用按钮尺寸的一半作为app:cornerRadius

答案 5 :(得分:1)

如果要使用VectorDrawable和ConstraintLayout

<FrameLayout
            android:id="@+id/ok_button"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:foreground="?attr/selectableItemBackgroundBorderless"
            android:background="@drawable/circle_button">
                <android.support.constraint.ConstraintLayout
                    android:layout_width="match_parent"
                    android:layout_height="match_parent">
                    <ImageView
                        android:id="@+id/icon_of_button"
                        android:layout_width="32dp"
                        android:layout_height="32dp"
                        app:layout_constraintBottom_toBottomOf="parent"
                        app:layout_constraintTop_toTopOf="parent"
                        app:layout_constraintRight_toRightOf="parent"
                        app:layout_constraintLeft_toLeftOf="parent"
                        app:srcCompat="@drawable/ic_thumbs_up"/>
                    <TextView
                        android:id="@+id/text_of_button"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        app:layout_constraintTop_toBottomOf="@+id/icon_of_button"
                        app:layout_constraintRight_toRightOf="parent"
                        app:layout_constraintLeft_toLeftOf="parent"
                        android:layout_marginTop="5dp"
                        android:textColor="@android:color/white"
                        android:text="ok"
                        />
                </android.support.constraint.ConstraintLayout>
            </FrameLayout>

圆圈背景:circle_button.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="1000dp" />
<solid android:color="#41ba7a" />
<stroke
    android:width="2dip"
    android:color="#03ae3c" />
<padding
    android:bottom="4dp"
    android:left="4dp"
    android:right="4dp"
    android:top="4dp" />
</shape>

答案 6 :(得分:1)

您可以使用 AndroidX 材质库中的 MaterialButton

<com.google.android.material.button.MaterialButton
     android:layout_width="75dp"
     android:layout_height="75dp"
     android:layout_margin="10dp"
     android:insetLeft="0dp"
     android:insetTop="0dp"
     android:insetRight="0dp"
     android:insetBottom="0dp"
     app:cornerRadius="50dp"
     app:icon="@drawable/ic_camera"
     app:iconGravity="textStart"
     app:iconPadding="0dp"
     app:iconSize="35dp" />

它会是这样的

Button preview

答案 7 :(得分:0)

在这里,您可以简单地执行操作,在drawable.xml中创建一个可绘制资源文件。说出round_button.xml,然后粘贴以下代码。

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <item>
       <shape
           android:shape="oval">

           <solid
               android:color="@color/button_start_gradient_color"/>
       </shape>
    </item>
    <item
        android:drawable="@drawable/microphone"/>
</layer-list>

注意:-使用您自己的颜色和可绘制资源,就像我使用@ drawable / microphone

以下是结果 [1]:https://i.stack.imgur.com/QyhdJ.png

答案 8 :(得分:0)

如果要使用ImageButton,请使用以下内容。它将创建带有材料波纹的圆形ImageButton。

<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_settings_6"
android:background="?selectableItemBackgroundBorderless"
android:padding="10dp"
/>

答案 9 :(得分:0)

不幸的是,使用XML可绘制对象并覆盖背景意味着您必须显式设置颜色,而不是能够使用应用程序样式的颜色。

我不是对每种行为的按钮颜色进行硬编码,而是选择对角半径进行硬编码,这样可以略微减少hacky并保留所有默认按钮行为(在按下按钮时更改颜色和其他视觉效果),并通过默认值:

  1. android:layout_heightandroid:layout_width设置为相同的值
  2. app:cornerRadius设置为高度/宽度的一半
  3. android:insetBottomandroid:insetTop设置为0dp以得到一个完美的圆圈

例如:

<Button
    android:insetBottom="0dp"
    android:insetTop="0dp"
    android:layout_height="150dp"
    android:layout_width="150dp"
    app:cornerRadius="75dp"
    />

答案 10 :(得分:0)

在 drawable 文件夹中创建一个新的矢量资源。

您也可以导入您的 PNG 图像,然后通过 https://image.online-convert.com/convert-to-svg 在线将文件转换为 SVG。分辨率越高,转换效果越好。

接下来,从该 SVG 文件创建一个新的矢量资产。

这是您可以使用的示例矢量圆图像。将代码复制到 drawables 文件夹中的 xml 文件中。

ic_check.xml:

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="24dp"
    android:height="24dp"
    android:viewportHeight="256"
    android:viewportWidth="256">
    <path
        android:fillColor="#2962FF"
        android:pathData="M111,1.7c-7.2,1.1 -22.2,4.8 -27.9,7 -33.2,12.5 -61.3,40.3 -74.1,73.3 -8.7,22.6 -10.5,55.3 -4.4,78 10.9,40 39.7,72.4 77.4,87 22.6,8.7 55.3,10.5 78,4.4 45.3,-12.3 79.1,-46.1 91.4,-91.4 2.9,-10.7 3.9,-21.9 3.3,-37.4 -0.7,-21.2 -4.6,-35.9 -14,-54.1 -18.2,-35 -54,-60.5 -93.4,-66.4 -6.7,-1 -30.7,-1.3 -36.3,-0.4zM145,23.1c21.8,3.3 46.5,16.5 61.1,32.8 20.4,22.6 30.1,51.2 27.7,81.1 -3.5,44.4 -35.9,82.7 -79.6,94 -21.6,5.6 -46.6,3.7 -67.8,-5.1 -10.4,-4.3 -24.7,-14.1 -33.4,-22.9 -41.6,-41.5 -41.6,-108.4 0,-150 24.3,-24.3 57.6,-35.1 92,-29.9z"
        android:strokeColor="#00000000" />
    <path
        android:fillColor="#2962FF"
        android:pathData="M148.4,113c-24.6,26 -43.3,44.9 -44,44.6 -0.7,-0.3 -8.5,-6.1 -17.3,-13 -8.9,-6.9 -16.5,-12.6 -17,-12.6 -1.4,-0 -25.6,19 -25.8,20.3 -0.3,1.4 62.7,50.2 64.8,50.2 1.7,-0 108.4,-112.3 108.4,-114.1 0,-1.3 -23.8,-20.4 -25.4,-20.4 -0.6,-0 -20.2,20.3 -43.7,45z"
        android:strokeColor="#00000000" />
</vector>

在您的按钮中使用此图片:

<ImageButton
    android:id="@+id/btn_level1"
    android:layout_width="36dp"
    android:layout_height="36dp"
    android:background="@drawable/ic_check"
/>

您的按钮将是一个圆形按钮。

enter image description here