Android - 无法按预期设置按钮边框

问题描述 投票:0回答:4

我前几天刚开始学习Android。今天当我玩 Button 时,我注意到我无法按预期设置边框。

以下 xml 文件:
按钮部分在activity_main.xml中:

<Button
    android:layout_width="200sp"
    android:layout_height="100dp"
    android:background="@drawable/start_button_selector"
    app:backgroundTint="@color/start_button_color_selector"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintVertical_bias=".4" />

start_button_selector.xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/arrow_button">
        <shape android:shape="rectangle">
            <solid android:color="@color/transparent" />
            <corners android:radius="12sp" />
            <stroke android:width="10sp" android:color="@color/start_button_color_selector"/>
        </shape>
    </item>
</selector>

开始按钮颜色选择器

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/black" android:state_pressed="true"/>
    <item android:color="@color/gray"/>
</selector>

但是,预览和模拟器都没有给出预期的结果。
预览不显示任何边框,模拟器显示紫色边框\

预期(单击时所有颜色都变成黑色):

但这是 xml 设计模式下的预览:

这是模拟器中显示的内容(API 30):

还尝试过:
将按钮更改为 androidx.appcompat.widget.AppCompatButton
删除笔画标签内的颜色
任何帮助都会很棒!

编辑:抱歉,如果我没有说清楚。问题是按下时不会改变颜色,使用上面的 xml 文件,按钮已经能够在按下时改变颜色。我遇到的问题是,边框在预览中是透明的,在模拟器中是紫色的,这不是我预期的灰色/黑色。

android xml android-studio android-layout android-button
4个回答
0
投票

您可以使用材质按钮来实现此目的。有很多有用的属性可以根据您的需要使用来制作按钮,例如 app:tripWidth, app:行程Color, app:cornerRadius, app:backgroundTint, app:icon, app:iconSize 以及更多内容,您可以在上面的链接中找到它们。

下面是使用上述材质按钮属性的按钮示例:

<com.google.android.material.button.MaterialButton
        android:id="@+id/button"
        android:layout_width="200dp"
        android:layout_height="100dp"
        android:padding="0dp"
        android:insetLeft="0dp"
        android:insetTop="0dp"
        android:insetRight="0dp"
        android:insetBottom="0dp"
        app:cornerRadius="12dp"
        app:strokeWidth="10dp"
        app:strokeColor="@color/start_button_color_selector"
        app:backgroundTint="@android:color/white"
        app:icon="@drawable/button_selector"
        app:iconTint="@null"
        app:iconSize="80dp"
        app:iconGravity="textStart"
        app:iconPadding="0dp"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintStart_toStartOf="parent"/>

其中 @color/start_button_color_selector.xml 将如下所示,根据选定/未选定状态设置描边颜色:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@android:color/black" android:state_pressed="true"/>
    <item android:color="#969292"/>
</selector>

@drawable/button_selector 将如下所示根据选定/未选定状态设置正确的矢量图标:

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

@drawable/ic_arrow_black_right_24dp 是黑色选定箭头的示例:

<vector android:autoMirrored="true" android:height="24dp"
    android:tint="@android:color/black" android:viewportHeight="24"
    android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
    <path android:fillColor="@android:color/black" android:pathData="M12,4l-1.41,1.41L16.17,11H4v2h12.17l-5.58,5.59L12,20l8,-8z"/>
</vector>

@drawable/ic_arrow_gray_right_24dp 是灰色未选中箭头示例:

<vector android:autoMirrored="true" android:height="24dp"
    android:tint="#969292" android:viewportHeight="24"
    android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
    <path android:fillColor="#969292" android:pathData="M12,4l-1.41,1.41L16.17,11H4v2h12.17l-5.58,5.59L12,20l8,-8z"/>
</vector>

未选择状态的最终结果将是:

选择/单击状态的最终结果将是:


0
投票

您应该从代码中删除此行。

app:backgroundTint="@color/start_button_color_selector"


0
投票

您可以创建预期结果的向量并将其用作背景 按钮,然后在其上应用 android:state_pressed


0
投票

您应该更改文件themes.xlm和themes.xlm(night) 改变 父=“Theme.AppCompat.Light.NoActionBar”

© www.soinside.com 2019 - 2024. All rights reserved.