0

我有一个客户想要在他们的应用程序中使用 ListViews 的常规滚动条。原因是因为此应用程序将专门与他们的设备一起使用,这些设备恰好具有电阻屏。如果没有触控笔,屏幕就不能很好地跟踪手势,并且用户不会总是可以使用触控笔。因此,传统的滚动条作为后备 UI 控件。快速滚动拇指不会是解决此问题的有用方法。

我在 API 中发现的一些有用的是 xml 属性,它们允许我近似跟踪和拇指的行为,例如:

android:scrollbarAlwaysDrawVerticalTrack="true"
android:scrollbarStyle="insideInset"
android:fadeScrollbars="false"

但是我在 API 中没有找到任何可以处理在轨道顶部和底部包含滚动按钮的内容。

我得出的结论是 API 不提供此功能是否正确?如果是这样,我唯一的选择是使用几个按钮来更改列表位置。这当然是一个可行的解决方案,但我想确保我没有重新发明另一个轮子。

我必须支持早至 2.2。

滚动条示例:

滚动条示例

4

3 回答 3

2

我得出的结论是 API 不提供此功能是否正确?

是的,你是。API 不支持ListView滚动按钮。您必须自己实现此功能。

编辑:基于以下评论的快速示例,扩展ListView为支持添加按钮。

private void init() { // Call this after the ListView is in your existing layout, perhaps in onLayout?
    // The following two lines create a new LinearLayout. If you want to design the layout in XML, you'll have to use LayoutInflater.
    LinearLayout newLayout = new LinearLayout(getContext());
    newLayout.setOrientation(LinearLayout.HORIZONTAL);
    newLayout.setLayoutParams(getLayoutParams());

    ViewGroup parent = (ViewGroup) getParent();
    int index = parent.indexOfChild(this);
    parent.removeView(this);
    newLayout.addView(this);
    parent.addView(newLayout, index);

    // Now, you can customize your LinearLayout.
    newLayout.addView(...); // Maybe add a vertical LinearLayout to contain your two buttons stacked upon each other?
}

这只是一个粗略的概念,但它应该能让你继续前进。

于 2012-07-18T20:33:49.173 回答
0

保罗的答案是正确的答案有一种叫做快速滚动的东西,它可以做你想做的事。

您可以通过 XML 启用它:

android:fastScrollEnabled="true" 或者在代码中:

getListView().setFastScrollEnabled(true); 它尽可能接近您想要的(不使用自定义视图)。

编辑:

我忘了提到,这只有在列表中有足够的元素时才有效。它必须是当前屏幕上可见长度的 4 倍左右。

于 2012-10-30T11:07:55.253 回答
-1

埃里克是对的……几乎。

有一种叫做 Fast Scroll 的东西可以做你想做的事。

您可以通过 XML 启用它:

android:fastScrollEnabled="true"

或在代码中:

getListView().setFastScrollEnabled(true);

它尽可能接近您想要的(不使用自定义视图)。

编辑:

我忘了提到,这只有在列表中有足够的元素时才有效。它必须是当前屏幕上可见长度的 4 倍左右。

于 2012-07-18T20:40:20.313 回答