布局预览中的TextClock渲染问题

8

当我在Android Studio布局预览中创建TextClock小部件时,它崩溃了并且没有显示更改。但是在调试设备上,该小部件正常工作。如果我注释掉它,布局预览就可以成功运行。另一台PC上的Android Studio可以成功运行并显示TextClock。

错误:布局预览

java.lang.NullPointerException
at android.content.ContentResolver.registerContentObserver(ContentResolver.java:2263)
at android.widget.TextClock.registerObserver(TextClock.java:626)
at android.widget.TextClock.onAttachedToWindow(TextClock.java:545)
at android.view.View.dispatchAttachedToWindow(View.java:19575)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3437)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3437)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3437)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3437)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3437)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3437)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3437)
at android.view.AttachInfo_Accessor.setAttachInfo(AttachInfo_Accessor.java:44)
at com.android.layoutlib.bridge.impl.RenderSessionImpl.inflate(RenderSessionImpl.java:355)
at com.android.layoutlib.bridge.Bridge.createSession(Bridge.java:404)
at com.android.tools.idea.layoutlib.LayoutLibrary.createSession(LayoutLibrary.java:141)
at com.android.tools.idea.rendering.RenderTask.createRenderSession(RenderTask.java:657)
at com.android.tools.idea.rendering.RenderTask.lambda$inflate$7(RenderTask.java:788)
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)

TextClock XML代码

<TextClock
            android:layout_width="120dp"
            android:layout_height="35dp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            android:layout_marginEnd="16dp"
            android:format24Hour="dd.MMMyyyy, HH:mm"
            android:format12Hour="dd.MMM.yyyy, hh:mm a"
            android:textColor="#d0ffffff"
            android:textSize="30sp" />

minSdkVersion更改为17并创建布局v17没有产生任何结果。 在Android Studio 3.6、3.6.1和4.0中发现了问题。


1
我会将其作为一个错误报告给AndroidStudio团队。 - Blundell
3个回答

10

在评论中加入您的TextClock并刷新预览,然后取消对TextClock的注释。这将解决您的问题。

当我升级到AS 3.6.1时,我遇到了这个问题。


我也遇到了同样的问题 - 快速注释掉并取消注释后,自动刷新了布局,一切都好了。 - buradd
每次我在布局中更改了一些内容,都需要刷新并注释/取消注释。 - Typikal_Failman
在你的布局还在进行时,保持你的TextClock小部件被注释掉或者替换成其他的小部件,比如TextView。当你完成后再把它设置回TextClock。 - Jaswant Singh
这不是正确的解决方案。如果我们在视图的代码上进行注释,然后再进行设备测试,我们需要取消注释该代码。需要一些稳定的解决方案。 - Yash
除非Android Studio的开发人员解决了这个问题,否则你无法做任何事情。 - Jaswant Singh
显示剩余2条评论

5
一个解决方法/权宜之计是创建TextClock的子类并将以下内容添加到创建的子类中:
@Override
protected void onAttachedToWindow() {
    try {
        super.onAttachedToWindow();
    } catch(Exception e)  {
    }
}

来源


它完美地工作,没有任何渲染问题。谢谢@tgi_rxlph - Yash

3

我曾经遇到同样的问题,我的解决方法是通过右键点击将TextClock转换为TextView -> 将视图转换为TextClock扩展TextView,然后布局会呈现,布局呈现后再将其转换回TextClock。

这是一个丑陋的解决方案 - 不是修复方案(在关闭Android Studio后需要重复此过程)- 但至少现在我可以看到布局了。

我将把它报告给Android Studio作为错误,并希望他们能够修复它。


2
我已经向开发人员发送了错误报告。 - Typikal_Failman
这个 bug 在 Android Studio 4.0.1 中仍未修复... T_T - franny zhao

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接