如何将自定义按钮应用于 Android Studio 中的活动?
Posted
技术标签:
【中文标题】如何将自定义按钮应用于 Android Studio 中的活动?【英文标题】:How to apply custom button to the activity in Android Studio? 【发布时间】:2021-06-11 01:31:37 【问题描述】:我的 MainActivity 有 4 个按钮,用作导航。界面如下
而且,我还在drawable文件夹下创建了button.xml。
<!-- res/drawable/button.xml -->
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<solid android:color="#457B9D"/>
<corners android:radius="20dp"/>
<stroke android:color="#fff" android:/>
</shape>
在 activity_main.xml 中,我想使用 android:background="@drawable/button" 将自定义按钮应用到视图
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_
android:layout_
android:background="#A8DADC"
tools:context=".MainActivity">
<LinearLayout
android:layout_
android:layout_
android:gravity="center"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<Button
android:id="@+id/button1"
android:layout_
android:layout_
android:layout_marginBottom="50dp"
android:background="@drawable/button"
android:text="@string/enter_current_job"
android:textAllCaps="false"
android:textSize="20sp" />
<Button
android:id="@+id/button2"
android:layout_
android:layout_
android:layout_marginBottom="50dp"
android:background="@drawable/button"
android:text="@string/enter_job_offer"
android:textAllCaps="false"
android:textSize="20sp" />
<Button
android:id="@+id/button3"
android:layout_
android:layout_
android:layout_marginBottom="50dp"
android:background="@drawable/button"
android:text="@string/adjust_comparison_settings"
android:textAllCaps="false"
android:textSize="20sp" />
<Button
android:id="@+id/button4"
android:layout_
android:layout_
android:background="@drawable/button"
android:text="@string/compare_job_offers"
android:textAllCaps="false"
android:textSize="20sp" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
另外,我将 theme.xml 更改为 NoActionBar
<resources xmlns:tools="http://schemas.android.com/tools">
<!-- Base application theme. -->
<style name="Theme.JobCompare6300" parent="Theme.MaterialComponents.DayNight.NoActionBar">
<!-- Primary brand color. -->
<item name="colorPrimary">@color/purple_500</item>
<item name="colorPrimaryVariant">@color/purple_700</item>
<item name="colorOnPrimary">@color/white</item>
<!-- Secondary brand color. -->
<item name="colorSecondary">@color/teal_200</item>
<item name="colorSecondaryVariant">@color/teal_700</item>
<item name="colorOnSecondary">@color/black</item>
<!-- Status bar color. -->
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
<!-- Customize your theme here. -->
</style>
</resources>
但我仍然有默认按钮。我错过了什么还是做错了什么?
【问题讨论】:
你在设备上试过了吗.. 我没有安卓手机。 在 android studio 的 android 模拟器上试一试 .. 你的按钮在实际的 android 手机上看起来很正常.... 或在设计窗口中,您可以看到设置为分配或默认主题的主题选项将其更改为appcompat
以特别查看按钮的外观
【参考方案1】:
您无需使用自定义背景。
只需使用MaterialButton
提供的属性即可:
<Button
app:backgroundTint="#457B9D"
app:cornerRadius="20dp"
app:strokeColor="#FFFFFF"
app:strokeWidth="2dp"
../>
由于您使用的是 Material Components 主题,因此您的 Button
在运行时将替换为 MaterialButton
。
【讨论】:
【参考方案2】:当您使用 MaterialComponents 主题时,您的 Button 是一个 MaterialButton,它管理自己的背景可绘制对象,因此不建议使用 android:background
。
要实现您想要的样式,您可以使用这些自定义属性:app:backgroundTint
、app:cornerRadius
、app:strokeWidth
和 app:strokeColor
<Button
android:id="@+id/button2"
android:layout_
android:layout_
android:layout_marginBottom="50dp"
app:backgroundTint="#457B9D"
app:cornerRadius="20dp"
app:strokeColor="#fff"
android:text="qzeazeazeza"
android:textAllCaps="false"
android:textSize="20sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
或者,如果您需要特定的可绘制对象,您可以随时使用 android.widget.Button
或使用 AppCompat 作为主题,而不是 MaterialComponents
<android.widget.Button
android:id="@+id/button2"
android:layout_
android:layout_
android:layout_marginBottom="50dp"
android:background="@drawable/button"
android:text="@string/enter_job_offer"
android:textAllCaps="false"
android:textSize="20sp" />
【讨论】:
以上是关于如何将自定义按钮应用于 Android Studio 中的活动?的主要内容,如果未能解决你的问题,请参考以下文章
Android Gradle 插件将自定义 Gradle 插件上传到自建 Maven 仓库 ⑤ ( 使用 Sonatype Nexus 搭建 Maven 仓库 )
如何将自定义字体应用于 TTTAttributedLabel