在模拟器中发出渲染按钮 (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
一切都按预期工作!
我有一个 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
一切都按预期工作!