Android 单击微调器布局并在棒棒糖和更高版本中显示微调器项目时,如何将其放置在微调器布局下方?

Android 单击微调器布局并在棒棒糖和更高版本中显示微调器项目时,如何将其放置在微调器布局下方?,android,android-layout,android-5.0-lollipop,android-spinner,Android,Android Layout,Android 5.0 Lollipop,Android Spinner,就像溢出菜单重叠工具栏一样,当它在棒棒糖及以上android版本中显示下拉项时,微调器重叠自身。因此,我需要将其放置在微调器视图下方,而不是上方 您可以使用 android:overlapAnchor="false" 这将显示微调器视图下方的下拉列表(在api级别21及更高级别上工作)。适用于所有api使用 android:dropDownVerticalOffset="35dp" 或者任何适合您需要的值。android:spinnerMode=“dropdown” android:dr

就像溢出菜单重叠工具栏一样,当它在棒棒糖及以上android版本中显示下拉项时,微调器重叠自身。因此,我需要将其放置在微调器视图下方,而不是上方

您可以使用

 android:overlapAnchor="false"
这将显示微调器视图下方的下拉列表(在api级别21及更高级别上工作)。

适用于所有api使用

 android:dropDownVerticalOffset="35dp"
或者任何适合您需要的值。

android:spinnerMode=“dropdown” android:dropDownVerticalOffset=“50dp”


这将显示微调器视图下方的下拉列表。

在微调器中使用以下属性

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>

最近,我遇到了同样的问题,但我在应用程序中有几个微调器,我希望它看起来一样,而不必在所有微调器中添加相同的属性,因此我使用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>

@样式/微调器\u样式
40度
假的

这取决于微调器的位置以及下拉列表中的项目数

如果微调器布局位于屏幕顶部,则
android:overlappanchor=“false”
就足够了

如果微调器布局在屏幕中央,有许多项,例如60项,那么
android:overlappanchor=“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()
    }
}