Android限制微调器下拉列表中显示的项目数

时间:2013-11-27 09:30:05

标签: android android-arrayadapter android-spinner

我有一个spinner项绑定到一个数组适配器,可能随时有0个或更多项。我希望微调器下拉列表一次只显示三个项目,其余项目可滚动。 我尝试在具有固定宽度的布局中包装微调器但是微调器下拉列表仍占用整个屏幕(如果阵列适配器中有许多项目)以显示列表。

3 个答案:

答案 0 :(得分:5)

我正在查看Spinner源代码,看起来你不能用微调器做到这一点。

Spinner有自己的私有接口SpinnerPopup,它定义了如何显示下拉项。这当前基于spinnerMode允许下拉列表或对话列表。

这两个选项也在Spinner类中作为私有类实现:DialogPopupDropdownPopup。由于您无法访问它们,在我看来,您目前唯一的选择是:

  1. 基于其他小部件(例如this example
  2. )实现您自己的自定义微调器 来自Spinner类的
  3. Copy the code似乎非常独立,并使用它来实现您的旋转器版本,修改其中的任何内容。
  4. 对不起,我无法提供更多帮助。

    祝你好运!

    编辑:

    如果您选择选项2,我认为您需要做的就是添加实施SpinnerPopup界面的模式。然后在构造函数Spinner(Context context, AttributeSet attrs, int defStyle, int mode)内添加另一个caseswitch检查模式以实例化您自己的弹出窗口。似乎并不难。

答案 1 :(得分:3)

这是最终简单的解决方案.. 只需在Spinner标签中复制此行...

android:dropDownHeight="100dp"    <!--change 100dp to your requirement-->

你也可以修改宽度......

android:dropDownWidth="100dp"   <!--change 100dp to your requirement-->

你知道它在AutoCompleteTextView上的作用以及至少api 16 ......

答案 2 :(得分:0)

推荐的解决方案并不是很有趣,因为它们会硬编码下拉列表的高度,这是不好的,因为不同手机中的字体大小实际上是不同的,我这样处理它是动态而可靠的:

class Solution:
    def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:

        # If lists empty return None
        if not l1 and not l2:
           more code.....