使用 app:srcCompat android MaterialButton 而不是 app:icon 时图标未显示

Posted

技术标签:

【中文标题】使用 app:srcCompat android MaterialButton 而不是 app:icon 时图标未显示【英文标题】:Icon is not showing when using app:srcCompat android MaterialButton instead of app:icon 【发布时间】:2021-07-26 05:51:28 【问题描述】:

我正在使用MaterialButtonapp:srcCompat,但不幸的是没有显示图标。尝试了矢量可绘制对象和 webp 图像,但没有任何效果。

  <com.google.android.material.button.MaterialButton
                android:id="@+id/facebookButton"
                style="@style/ButtonS.Normal"
                android:layout_
                android:layout_
                android:layout_marginTop="@dimen/spacing_8"
                android:background="@drawable/bg_blue_round_corner"
                android:gravity="center"
                android:text="@string/welcome_screen_continue_with_facebook"
                app:srcCompat="@drawable/ic_facebook"
                app:iconGravity="textStart"
                app:iconPadding="7dp"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintRight_toRightOf="parent">

有人知道为什么它不起作用吗?

注意:我必须使用app:srcCompat 而不是app:icon

因为得到一个随机异常,我怀疑是因为使用了app:icon 详细堆栈跟踪:

Fatal Exception: java.lang.RuntimeException: Unable to start activity ComponentInfocom.android.client/com.android.onboarding.welcome.ui.WelcomePageActivity: android.view.InflateException: Binary XML file line #264 in com.android.client:layout/activity_landing_page: Binary XML file line #264 in com.android.client:layout/activity_landing_page: Error inflating class <unknown>
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3477)
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3620)
       at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
       at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
       at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2183)
       at android.os.Handler.dispatchMessage(Handler.java:107)
       at android.os.Looper.loop(Looper.java:241)
       at android.app.ActivityThread.main(ActivityThread.java:7617)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:941)

以及发生异常的 XML 第 264 行:

<com.google.android.material.button.MaterialButton
.......
app:layout_constraintTop_toBottomOf="@+id/emailButton" /> // Line 264

【问题讨论】:

【参考方案1】:

使用app:icon 属性:

    <com.google.android.material.button.MaterialButton
        app:icon="@drawable/ic_facebookx"/>

MaterialButton 不使用app:srcCompat

【讨论】:

我已经在帖子中提到,由于另一个问题,我不会使用app:icon。我必须使用app:srcCompatapp:src @0xAliHn 我读了这个问题,但你不能使用它们,因为 MaterialButton 不使用它们来加载图标。另一个问题是什么? 有时会收到android.view.InflateException。我怀疑这是使用 app:icon 时的原因 @0xAliHn 没有堆栈跟踪就不可能进行分析,但无论如何MaterialButton 可以与app:icon 一起使用。 Fatal Exception: java.lang.RuntimeException: Unable to start activity ComponentInfo...........onboarding.welcome.ui.WelcomePageActivity: android.view.InflateException: Binary XML file line #264 in com.android.client:layout/activity_landing_page: Binary XML file line #264 in com.android.client:layout/activity_landing_page: Error inflating class &lt;unknown&gt; 第 264 行是 app:layout_constraintTop_toBottomOf="@+id/emailButton" /&gt;

以上是关于使用 app:srcCompat android MaterialButton 而不是 app:icon 时图标未显示的主要内容,如果未能解决你的问题,请参考以下文章

app:srcCompat - 矢量绘图显示在设计预览中,但不显示在应用程序中

Android的Kotlin的布局文件里面的app:srcCompat提示:红色波浪线

android控件-images

打开相机

Android imageview id无法解析,

我不能在android studio Gradle 4.7中使用ImageView