Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Can';t制作旋转器';s滚动条始终可见(Android)_Android_Scrollbar_Spinner - Fatal编程技术网

Can';t制作旋转器';s滚动条始终可见(Android)

Can';t制作旋转器';s滚动条始终可见(Android),android,scrollbar,spinner,Android,Scrollbar,Spinner,我有这样一个问题-我想使微调器的滚动条始终可见。 但对于微调器函数 setScrollbarFadingEnabled(false); 在绘制GUI期间导致NullExceptionPointer崩溃 XML标记也不能解决这个问题——似乎spinner忽略了它们 也许还有其他的移动方式?例如,使用自定义滚动条?如果是,我怎么做 谢谢你的回答, 德米特里 正如我被问到的,这里有一条LogCat错误消息,用于只包含一个微调器的简单项目: AndroidRuntime(2252): FATAL EX

我有这样一个问题-我想使微调器的滚动条始终可见。 但对于微调器函数

setScrollbarFadingEnabled(false);
在绘制GUI期间导致NullExceptionPointer崩溃

XML标记也不能解决这个问题——似乎spinner忽略了它们

也许还有其他的移动方式?例如,使用自定义滚动条?如果是,我怎么做

谢谢你的回答, 德米特里

正如我被问到的,这里有一条LogCat错误消息,用于只包含一个微调器的简单项目:

AndroidRuntime(2252): FATAL EXCEPTION: main
AndroidRuntime(2252): java.lang.NullPointerException
AndroidRuntime(2252): at android.view.View.onDrawScrollBars(View.java:5836)
AndroidRuntime(2252): at android.view.View.draw(View.java:6799)
AndroidRuntime(2252): at android.view.ViewGroup.drawChild(ViewGroup.java:1640)
AndroidRuntime(2252): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1367)
AndroidRuntime(2252): at android.view.ViewGroup.drawChild(ViewGroup.java:1638)
AndroidRuntime(2252): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1367)
AndroidRuntime(2252): at android.view.View.draw(View.java:6796)
AndroidRuntime(2252): at android.widget.FrameLayout.draw(FrameLayout.java:352)
AndroidRuntime(2252): at android.view.ViewGroup.drawChild(ViewGroup.java:1640)
AndroidRuntime(2252): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1367)
AndroidRuntime(2252): at android.view.ViewGroup.drawChild(ViewGroup.java:1638)
AndroidRuntime(2252): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1367)
AndroidRuntime(2252): at android.view.View.draw(View.java:6796)
AndroidRuntime(2252): at android.widget.FrameLayout.draw(FrameLayout.java:352)
AndroidRuntime(2252): at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:2078)
AndroidRuntime(2252): at android.view.ViewRoot.draw(ViewRoot.java:1433)
AndroidRuntime(2252): at android.view.ViewRoot.performTraversals(ViewRoot.java:1175)
AndroidRuntime(2252): at android.view.ViewRoot.handleMessage(ViewRoot.java:1753)
AndroidRuntime(2252): at android.os.Handler.dispatchMessage(Handler.java:99)
AndroidRuntime(2252): at android.os.Looper.loop(Looper.java:123)
AndroidRuntime(2252): at android.app.ActivityThread.main(ActivityThread.java:4632)
AndroidRuntime(2252): at java.lang.reflect.Method.invokeNative(Native Method)
AndroidRuntime(2252): at java.lang.reflect.Method.invoke(Method.java:521)
AndroidRuntime(2252): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:871)
AndroidRuntime(2252): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:629)
AndroidRuntime(2252): at dalvik.system.NativeStart.main(Native Method)

经过初步调查,我认为不可能调用
setScrollbarFadingEnabled(false)在微调器中

我已经阅读了类
Spinner.java
View.java
的实现(最后一个实现了API16的
setCrollBarFadingEnabled(boolean)
,问题是行:

cache.scrollBar.setAlpha(255);
可能
cache.scrollBar
此时为空,我没有找到任何方法强制初始化该属性

管理此属性的大多数方法都是受保护的或私有的,因此我们不能只调用它们


我将继续研究这个问题,以找到一个可能的解决方案,但现在,考虑到还没有人回答这个问题,我认为这是不可能的。

Spinner没有滚动条,因此您得到的是NullPointerException

spinner显示的弹出窗口有一个滚动条。因此您需要更改spinner显示的ListView的属性。但是spinner不会通过任何公共方法公开ListView本身

即使通过反射获得ListPopupWindow,也会出现另一个问题,即ListPopupWindow的ListView仅在单击微调器后创建

但无法注册微调器的OnClickListener,以便在显示后设置ListView属性

您可以创建一个覆盖performClick的自定义微调器,然后通过反射获取mPopup。并使用
mPopup.getListView().setScrollbarFadingEnabled(false)

但是,如果您要创建自定义微调器,我相信实现整个弹出窗口以满足您的需要比使用反射更容易。

感谢@nandeesh的回答,也感谢@Eng.Fouad的回答

我注意到“setScrollbarFadingEnabled”java方法和“fadeScrollbar”xml方法都不会对spinner产生任何影响,因为spinner的列表视图包装在一个对话框(弹出窗口)中,所以这些属性不会到达listview

但真正到达微调器listview的是主题

因此,只需创建如下自定义主题:

<style name="App_SpinnerStyle" >
        <item name="android:fadeScrollbars">false</item>
</style>
android:popupTheme="@style/App_SpinnerStyle"

已尝试和测试!

在您的应用程序主题或活动中:

  <item name="android:dropDownListViewStyle">@style/SpinnerStyle1</item>
@style/SpinnerStyle1
声明喷丝头样式1:

<style name="SpinnerStyle1" parent="Widget.AppCompat.ListView.DropDown">
        <item name="android:divider">@color/blackText</item>
        <item name="android:dividerHeight">1px</item>
          <item name="android:scrollbarAlwaysDrawVerticalTrack">true</item>
</style>

@彩色/黑色文本
1px
真的

由于不容易访问微调器的底层
列表视图
,因此我找到了一个简单的解决方案

在styles.xml中创建一个样式,并将
scrollbarFadeDuration
设置为某个无穷的值

<style name="AlwaysEnableScrollBar" parent="Widget.AppCompat.ListView.DropDown">
    <item name="android:scrollbarFadeDuration">10000000</item>
</style>

10000000
然后在微调器主题中设置:

<Spinner
    ...
    android:theme="@style/AlwaysEnableScrollBar"/>


我们能看到一些日志吗?谢谢。这在所有api级别上都会发生吗?@nandeesh我肯定在api 15之后会发生这种情况。对次要级别不太确定。好的,谢谢你的回答,我想这几乎和我想的一样。很遗憾。
<Spinner
    ...
    android:theme="@style/AlwaysEnableScrollBar"/>