Tus*_*dey 27 android android-layout android-spinner
请建议我用来创建它的任何方法.
查询:我正在创建2-Spinner视图,其中我必须添加国家/城市列表,所以如果我选择印度然后我在下拉视图中获得50个项目,问题是它占据了整个页面身高.
我想要的是:我想创建一个下拉视图,用户只能在下拉视图中看到10个项目,只要用户滚动下拉视图,就会显示其他项目.
shl*_*ee1 61
你可以使用Reflection.
Spinner spinner = (Spinner) findViewById(R.id.spinner);
try {
Field popup = Spinner.class.getDeclaredField("mPopup");
popup.setAccessible(true);
// Get private mPopup member variable and try cast to ListPopupWindow
android.widget.ListPopupWindow popupWindow = (android.widget.ListPopupWindow) popup.get(spinner);
// Set popupWindow height to 500px
popupWindow.setHeight(500);
}
catch (NoClassDefFoundError | ClassCastException | NoSuchFieldException | IllegalAccessException e) {
// silently fail...
}
Run Code Online (Sandbox Code Playgroud)
从2021年开始,我会选择:并在以下内容Exposed Dropdown Menus
中使用:AutoCompleteTextView
android:dropDownHeight="300dp"
Run Code Online (Sandbox Code Playgroud)
您也可以通过影响继承下拉视图的位置和大小Spinner
,并覆盖其getWindowVisibleDisplayFrame(Rect outRect)
被使用android.widget.PopupWindow
的计算.只需设置outRect
为限制可以显示下拉视图的区域.
这种方法当然不适用于所有场景,因为有时您希望放置下拉视图,以便它不会模糊另一个视图或仅通过"实例外"知道的其他条件.
在我的情况下,我需要将FLAG_LAYOUT_NO_LIMITS
标志应用于我的活动窗口,这导致了outRect
巨大的,因此下拉视图的一部分有时隐藏在导航栏后面.为了恢复原始行为,我使用了以下覆盖:
@Override
public void getWindowVisibleDisplayFrame(Rect outRect) {
WindowManager wm = (WindowManager) getContext.getSystemService(Context.WINDOW_SERVICE);
Display d = wm.getDefaultDisplay();
d.getRectSize(outRect);
outRect.set(outRect.left, <STATUS BAR HEIGHT>, outRect.right, outRect.bottom);
}
Run Code Online (Sandbox Code Playgroud)
小智 6
只需android:insetBottom="50dp"
在以下位置设置弹出背景 xml 文件drawable
:
<--spinner_popup_bg.xml-->
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"
android:exitFadeDuration="@android:integer/config_mediumAnimTime">
<item android:state_pressed="true" android:drawable="@android:color/white" />
<item android:state_selected="true" android:drawable="@android:color/white" />
<item>
<inset android:insetLeft="5dp" android:insetRight="5dp" android:insetBottom="50dp">
<shape android:shape="rectangle">
<stroke android:width="1dp"
android:color="#001726" />
<solid android:color="#FFFF" />
</shape>
</inset>
</item>
</selector>
Run Code Online (Sandbox Code Playgroud)
对于spinner
活动集中android:popupBackground="@drawable/spinner_popup_bg"
即
<Spinner
android:id="@+id/myid"
...
android:layout_width="300dp"
android:layout_height="?attr/dropdownListPreferredItemHeight"
android:popupBackground="@drawable/spinner_popup_bg"
...
/>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
26139 次 |
最近记录: |