像溢出菜单重叠工具栏一样,当它显示在棒棒糖和Android版本上方的下拉项目时,微调器重叠自身。所以我需要将它放在微调视图下面而不是它上面。
答案 0 :(得分:47)
您可以使用
android:overlapAnchor="false"
这将显示微调器视图下方的下拉列表(在api级别21及更高级别上工作)。
答案 1 :(得分:25)
对于所有api使用
android:dropDownVerticalOffset="35dp"
或任何适合您需求的价值。
答案 2 :(得分:2)
android:spinnerMode="dropdown"
android:dropDownVerticalOffset="50dp"
这将显示微调器视图下方的下拉列表。
答案 3 :(得分:2)
在Spinner中使用以下属性
android:dropDownVerticalOffset="35dp"
以下是Spinner的代码
<RelativeLayout
android:layout_width="200dp"
android:layout_height="wrap_content"
android:layout_marginLeft="45dp"
android:layout_marginRight="3dp"
android:layout_weight=".28"
android:orientation="horizontal">
<Spinner
android:id="@+id/spinner_users"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_gravity="left"
android:layout_marginLeft="5dp"
android:background="@android:color/transparent"
android:dropDownVerticalOffset="35dp"
android:spinnerMode="dropdown" />
<ImageView
android:layout_width="30dp"
android:layout_height="50dp"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_gravity="center"
android:src="@drawable/drop_down" />
</RelativeLayout>
答案 4 :(得分:2)
最近,我遇到了同样的问题,但我在应用程序中有几个微调器,我希望它看起来一样,而不必在所有这些中添加相同的属性,所以我使用style.xml来自定义我的微调器以下
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:spinnerStyle">@style/spinner_style</item>
</style>
<style name="spinner_style" parent="Widget.AppCompat.Spinner">
<item name="android:dropDownVerticalOffset">40dip</item>
<item name="overlapAnchor">false</item>
<!--Other customizations-->
</style>
</resources>
答案 5 :(得分:0)
这取决于微调器的位置以及下拉列表中的项目数。
如果微调器布局位于屏幕顶部,则android:overlapAnchor="false"
就足够了;
如果微调框布局位于屏幕中央,周围有很多项目,例如60个项目,则android:overlapAnchor="false"
不满足您的要求,因为下拉列表没有足够的空间;当微调框位于底部但下拉列表位于微调框上方时,情况与此类似。
我认为Spinner不是一个灵活的android小部件,因为可用设置不多,例如下拉高度,加载数据时将选择第一项。为实现同一目的,我认为ListPopupWindow
是一个很好的替代品。这是一个简单的例子:
布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
android:layout_height="match_parent" android:orientation="vertical" android:gravity="center">
<TextView
android:gravity="center_vertical"
android:text="Tap for more options"
android:id="@+id/tv_anchor"
android:layout_margin="20dp"
android:background="@drawable/spinner_bg"
android:layout_width="match_parent"
android:layout_height="40dp"/>
</LinearLayout>
活动:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.act_drop_down)
tvAnchor = findViewById(R.id.tv_anchor)
val popupList = ListPopupWindow(this)
popupList.setAdapter(ArrayAdapter(this, android.R.layout.simple_spinner_item, getData()))
popupList.anchorView = tvAnchor
popupList.width = AbsListView.LayoutParams.WRAP_CONTENT
popupList.height = 100*3
popupList.setOnItemClickListener { parent, view, position, id ->
popupList.dismiss()
}
tvAnchor.setOnClickListener {
popupList.show()
}
}