【问题标题】:Hiding ScrollView stick gives null pointer exception on some devices隐藏 ScrollView 棒在某些设备上会出现空指针异常
【发布时间】:2016-02-11 09:36:57
【问题描述】:

我尝试设置 ScrollView 的 android:scrollbars="none" 属性,但问题是在输入信息时键盘已启动,然后如果您尝试滚动,则它不会滚动到布局结束。

我使用布局中 <ScrollView> 标记内的以下代码行隐藏滚动条棒

android:scrollbarThumbVertical="@null"

它在三星 s4 设备上完美运行,但在 LG 上却因以下异常而崩溃 -

FATAL EXCEPTION: main 
java.lang.NullPointerException
at android.widget.ScrollBarDrawable.setAlpha(ScrollBarDrawable.java: 221)
at android.view.View.onDrawScrollBars(View.java: 11306)
at android.view.View.draw(View.java: 13567)
at android.widget.FrameLayout.draw(FrameLayout.java: 467)
at android.widget.ScrollView.draw(ScrollView.java: 1752)
at android.view.View.getDisplayList(View.java: 12512)
at android.view.View.getDisplayList(View.java: 12556)
at android.view.View.draw(View.java: 13285)
at android.view.ViewGroup.drawChild(ViewGroup.java: 2931)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java: 2801)
at android.view.View.draw(View.java: 13564)
at android.view.View.getDisplayList(View.java: 12512)
at android.view.View.getDisplayList(View.java: 12556)
at android.view.View.draw(View.java: 13285)
at android.view.ViewGroup.drawChild(ViewGroup.java: 2931)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java: 2801)
at android.view.View.draw(View.java: 13564)
at android.widget.FrameLayout.draw(FrameLayout.java: 467)
at android.view.View.getDisplayList(View.java: 12512)
at android.view.View.getDisplayList(View.java: 12556)
at android.view.View.draw(View.java: 13285)
at android.view.ViewGroup.drawChild(ViewGroup.java: 2931)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java: 2801)
at android.view.View.getDisplayList(View.java: 12510)
at android.view.View.getDisplayList(View.java: 12556)
at android.view.View.draw(View.java: 13285)
at android.view.ViewGroup.drawChild(ViewGroup.java: 2931)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java: 2801)
at android.view.View.draw(View.java: 13564)
at android.widget.FrameLayout.draw(FrameLayout.java: 467)
at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java: 2473)
at android.view.HardwareRenderer$GlRenderer.draw(HardwareRenderer.java: 1206)
at android.view.ViewRootImpl.draw(ViewRootImpl.java: 2169)
at android.view.ViewRootImpl.performDraw(ViewRootImpl.java: 2041)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java: 1849)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java: 1009)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java: 4256)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java: 725)
at android.view.Choreographer.doCallbacks(Choreographer.java: 555)
at android.view.Choreographer.doFrame(Choreographer.java: 525)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java: 711)
at android.os.Handler.handleCallback(Handler.java: 615)
at android.os.Handler.dispatchMessage(Handler.java: 92)
at android.os.Looper.loop(Looper.java: 137)
at android.app.ActivityThread.main(ActivityThread.java: 4917)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java: 511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java: 790)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java: 557)
at dalvik.system.NativeStart.main(Native Method)

它适用于某些设备而不是所有设备的原因是什么?

唯一正确的选择是按如下方式设置它 -

yourScrollView.setVerticalScrollBarEnabled(false);

【问题讨论】:

  • 这似乎与 API 版本有关,而不是与制造商有关。我在 LG 和三星的 API 17 和 18 上都发生了崩溃感谢您的解决方案!

标签: android android-scrollview


【解决方案1】:

@null 值导致NullPointerException。您可以改用透明的可绘制对象:

android:scrollbarThumbVertical="@android:color/transparent"

【讨论】:

  • 我在 Android 4.4.2 上运行的 WebView 遇到了这个问题。我用webview.setScrollbarFadingEnabled(true); 修复它这个想法是在点击 setAlpha() 上的任何方法调用之前尝试从 onDrawScrollBars() 返回;你可以在这里查看源代码android.googlesource.com/platform/frameworks/base/+/…
猜你喜欢
  • 2015-01-09
  • 1970-01-01
  • 2017-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-02
  • 2021-06-29
  • 2015-07-25
相关资源
最近更新 更多