我有一个绑定到数组适配器的旋转框,它随时可能有0个或多个项目。我希望旋转框下拉列表一次只显示三个项目,其余项目可滚动。 我尝试将旋转框包装在具有固定宽度的布局中,但如果数组适配器中有那么多项,则旋转框下拉列表仍然占用整个屏幕来显示列表。
我有一个绑定到数组适配器的旋转框,它随时可能有0个或多个项目。我希望旋转框下拉列表一次只显示三个项目,其余项目可滚动。 我尝试将旋转框包装在具有固定宽度的布局中,但如果数组适配器中有那么多项,则旋转框下拉列表仍然占用整个屏幕来显示列表。
Spinner
的源代码,似乎你无法使用spinner进行此操作。
Spinner
有自己的私有接口,称为SpinnerPopup
,它定义了如何显示下拉项。这目前基于spinnerMode
,允许下拉或对话框列表。Spinner
类中实现:DialogPopup
和DropdownPopup
。由于您无法访问它们,因此在此时您唯一的选择是:
Spinner
类,它似乎是相当独立的,使用它来实现您自己版本的旋转器,并在其中修改任何您喜欢的内容。很抱歉我不能提供更多帮助。
祝你好运!
编辑:
如果您选择选项2,我认为您需要做的就是添加实现SpinnerPopup
接口的模式。然后在构造函数Spinner(Context context, AttributeSet attrs, int defStyle, int mode)
中,添加另一个case
到switch
检查模式以实例化自己的弹出窗口。看起来并不难。
http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/1.5_r4/android/widget/Spinner.java
(后来才意识到这是2009年的源代码)...我删除了几乎所有显示错误的内容,在onClick函数中设置了下拉框对话框的宽度和高度(在Android 1.5中没有弹出窗口),这起到了作用! - thunderbirdHere's the ultimately simple solution.. just copy this line in Spinner tag...
android:dropDownHeight="100dp" <!--change 100dp to your requirement-->
you can also modify width...
android:dropDownWidth="100dp" <!--change 100dp to your requirement-->
and you know what it works on
AutoCompleteTextView
too and with atleast api 16...
推荐的解决方案并不是很有趣,因为它们硬编码了下拉菜单的高度,这很糟糕,因为不同手机上的字体大小实际上是不同的。我像这样动态和可靠地处理它:
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
R.layout.drop_down_text_view,
new String[]{"A", "B", "C", "D", "E"}) {
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
TextView dropDownTextView = (TextView) super.getView(position, convertView, parent);
dropDownTextView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
myDropDownMenuOrSpinnerOrAutoCompleteTextView.setDropDownHeight(dropDownTextView.getHeight() * 3);
dropDownTextView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
}
});
return dropDownTextView;
}
};