在模拟器中发出渲染按钮 (XML)

Issue rendering buttons in the emulator (XML)

我有一个 activity 有一堆不同的视图,然后是 2 个未正确呈现的按钮。我可以看到按钮应该出现的位置,因为当我将鼠标悬停在该部分上时,我可以看到选择器出现,但我看不到它们应该出现的任何位置。我可以在布局预览中看到按钮,但看不到模拟器。 activity 上的所有其他按钮,具有相同的、完全相同的样式,都按预期工作和呈现。

下面是我用于 XML 布局的代码(导致问题的按钮是:@+id/refine@+id/sort):

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/background">
    <RelativeLayout
        android:id="@+id/header"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginEnd="8dp">
        ....
    </RelativeLayout>

    <TextView
       .../>

    <com.google.android.material.button.MaterialButton
        android:id="@+id/refine"
        style="@style/Widget.MaterialComponents.Button.TextButton"
        android:layout_width="29dp"
        android:layout_height="29dp"
        android:padding="8dp"
        app:cornerRadius="30dp"
        android:layout_toStartOf="@+id/sort"
        android:layout_marginEnd="5dp"
        android:layout_below="@id/header"
        android:drawableStart="@drawable/filter"
        android:theme="@style/MainButtonTheme" />

    <com.google.android.material.button.MaterialButton
        android:id="@+id/sort"
        style="@style/Widget.MaterialComponents.Button.TextButton"
        android:layout_width="29dp"
        android:layout_height="29dp"
        android:padding="8dp"
        app:cornerRadius="30dp"
        android:layout_marginEnd="12dp"
        android:layout_alignParentEnd="true"
        android:layout_below="@id/header"
        android:drawableStart="@drawable/sort"
        android:theme="@style/MainButtonTheme" />

    <androidx.core.widget.NestedScrollView
        ...
    </androidx.core.widget.NestedScrollView>

    <include
        ... />
</RelativeLayout>

我已经检查过我是否不小心用错了图标的颜色,但我绝对没有。

我也意识到我遇到了一个错误(这不会阻止来自 运行 的代码)- 详细信息如下(我不知道问题是什么):

java.lang.NoClassDefFoundError: androidx/emoji2/viewsintegration/EmojiTextViewHelper
    at androidx.appcompat.widget.AppCompatEmojiTextHelper.<init>(AppCompatEmojiTextHelper.java:43)
    at androidx.appcompat.widget.AppCompatTextView.getEmojiTextViewHelper(AppCompatTextView.java:132)
    at androidx.appcompat.widget.AppCompatTextView.setFilters(AppCompatTextView.java:219)
    at android.widget.TextView.<init>(TextView.java:1613)
    at android.widget.TextView.<init>(TextView.java:968)
    at androidx.appcompat.widget.AppCompatTextView.<init>(AppCompatTextView.java:108)
    at com.google.android.material.textview.MaterialTextView.<init>(MaterialTextView.java:93)
    at com.google.android.material.textview.MaterialTextView.<init>(MaterialTextView.java:88)
    at com.google.android.material.textview.MaterialTextView.<init>(MaterialTextView.java:83)
    at com.google.android.material.theme.MaterialComponentsViewInflater.createTextView(MaterialComponentsViewInflater.java:61)
    at androidx.appcompat.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:121)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at android.view.BridgeInflater.lambda$createViewFromCustomInflater[=12=](BridgeInflater.java:259)
    at android.view.BridgeInflater.createViewFromCustomInflater(BridgeInflater.java:285)
    at android.view.BridgeInflater.onCreateView(BridgeInflater.java:122)
    at android.view.LayoutInflater.onCreateView(LayoutInflater.java:930)
    at android.view.LayoutInflater.onCreateView(LayoutInflater.java:950)
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:1004)
    at android.view.BridgeInflater.createViewFromTag(BridgeInflater.java:309)
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:961)
    at android.view.LayoutInflater.rInflate_Original(LayoutInflater.java:1123)
    at android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:72)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:1097)
    at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1084)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:682)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:501)
    at com.android.layoutlib.bridge.impl.RenderSessionImpl.inflate(RenderSessionImpl.java:328)
    at com.android.layoutlib.bridge.Bridge.createSession(Bridge.java:396)
    at com.android.tools.idea.layoutlib.LayoutLibrary.createSession(LayoutLibrary.java:209)
    at com.android.tools.idea.rendering.RenderTask.createRenderSession(RenderTask.java:608)
    at com.android.tools.idea.rendering.RenderTask.lambda$inflate(RenderTask.java:734)
    at java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1590)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)

非常感谢任何帮助。

当 Android Studio 不断建议我使用 drawableStart 而不是 drawableLeft 时,我开始遇到这个问题。我不知道这可能是个问题。

在我的代码中更改了一堆东西之后,我终于发现 drawableStart 而不是 drawableLeft 是导致我的按钮出现问题的原因,所以我现在改回 drawableLeft 一切都按预期工作!