Android Spinner 下拉箭头不显示

Posted

技术标签:

【中文标题】Android Spinner 下拉箭头不显示【英文标题】:Android Spinner Dropdown arrow not displaying 【发布时间】:2015-05-14 14:09:37 【问题描述】:

我的片段背景是白色的,除非我点击它,否则微调器的箭头不会显示。

这是我的 Java 文件中的 sn-p:

    spinner = (Spinner)v.findViewById(R.id.spinner);
    ArrayAdapter adapter = ArrayAdapter.createFromResource(getActivity(), R.array.accounts,R.layout.spinner_item);
    adapter.setDropDownViewResource(R.layout.spinner_dropdown_items);
    spinner.setAdapter(adapter);
    spinner.setPrompt("Select an account");

这是我用于 spinner_item 的 XML

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
style="?android:attr/spinnerItemStyle"
android:singleLine="true"
android:layout_
android:layout_
android:ellipsize="marquee"
android:textAlignment="inherit"
android:textSize="16dp"
android:background="#FFFFFFFF"
android:textColor="#ff252525"/>

这是我的 spinner_dropdown_items 的布局。

<?xml version="1.0" encoding="utf-8"?>

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
style="?android:attr/spinnerItemStyle"
android:singleLine="true"
android:layout_
android:layout_
android:ellipsize="marquee"
android:textAlignment="inherit"
android:textSize="16dp"
android:background="#FFFFFFFF"
android:textColor="#ff252525"/>

这是我的微调器在片段的白色背景下的外观: White Colour Background - Spinner 这就是我将背景颜色更改为紫色时的样子: Purple background - Spinner

【问题讨论】:

【参考方案1】:

这对我有用,也更简单:

<Spinner
      android:id="@+id/spinner"
      android:layout_
      android:layout_
      android:theme="@style/ThemeOverlay.AppCompat.Light"
      android:spinnerMode="dropdown" />

在你的类文件中:

spinner = (Spinner) view.findViewById(R.id.spinner);
ArrayAdapter adapter = ArrayAdapter.createFromResource(this, R.array.spinner_data, android.R.layout.simple_spinner_dropdown_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);

希望这会有所帮助;)

【讨论】:

【参考方案2】:

试试这个:

<Spinner
     android:id="@+id/spinnPhoneTypes"
     android:layout_
     style="@android:style/Widget.Spinner.DropDown"
     android:layout_
     android:layout_marginLeft="10dp"
     android:layout_weight="1"
     android:background="@drawable/shape_drop_down_normal"
     android:gravity="center_vertical" />

shape_drop_down_normal.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item>
        <shape>
            <solid android:color="@android:color/transparent" />

            <stroke
                android:
                android:color="#6f94c7" />

            <padding
                android:bottom="10dp"
                android:left="2dp"
                android:right="10dp"
                android:top="10dp" />
        </shape>
    </item>
    <item>
        <bitmap
            android:gravity="end"
            android:src="@drawable/drop_arrow" />
    </item>
</layer-list>

【讨论】:

我该怎么做呢?我不太确定我是如何尝试这种方式的 只是一个补充:如果你的 drop_arrow 是一个向量,你必须将 &lt;item&gt;&lt;bitmap.. 部分更改为 &lt;item android:gravity="end" android:drawable="@drawable/drop_arrow" /&gt;【参考方案3】:

检查您是否为Spinner 提供背景,如果您删除它,它将解决问题

【讨论】:

【参考方案4】:

只需在Spinner 标签中添加主题即可。

android:theme="@style/ThemeOverlay.AppCompat.Light"

【讨论】:

哇!这对我有用【参考方案5】:
    <RelativeLayout
            android:layout_
            android:layout_
            android:layout_marginTop="20dp"
            android:background="@drawable/edit_bg">
            <androidx.appcompat.widget.AppCompatSpinner
                android:layout_
                android:layout_
                android:fontFamily="@font/railayregular"
                app:adapter="@adapter"
                android:onItemSelected="@click::click"
                android:textColor="@color/black"
                android:spinnerMode="dropdown"
                android:theme="@style/Theme.AppCompat.Light"
                android:textColorHint="@color/black" />
        </RelativeLayout>

【讨论】:

【参考方案6】:

最简单的方法是设置背景图片(带箭头)而不是颜色。

 spinner.setBackgroundResource(R.drawable.spinner_img);

希望对你有帮助。

【讨论】:

我尝试过这种方式,但图片在微调器上到处都是。我希望箭头在微调器的一侧。所以现在它看起来像这样; [dropbox.com/s/oe59pxiehktwdet/…【参考方案7】:

为避免使用可绘制对象,请将微调器包装在视图中,并为包装器视图设置背景颜色。例如,

<android.support.v7.widget.CardView
        android:id="@+id/cardView_spinner"
        android:layout_
        android:layout_
        android:layout_margin="32dp"
        android:background="@color/white">

        <Spinner
            android:id="@+id/spinner"
            android:layout_
            android:layout_ />

    </android.support.v7.widget.CardView>

【讨论】:

【参考方案8】:

删除微调器的背景颜色,例如您设置了不会显示下拉图标的白色背景

【讨论】:

【参考方案9】:

如果您使用 Material Components 作为主题,这也适用于我,

<Spinner
      android:id="@+id/spinner"
      android:layout_
      android:layout_
      android:theme="@style/Theme.MaterialComponents.Light"
      android:spinnerMode="dropdown" />

在你的代码中:

spinner = (Spinner) view.findViewById(R.id.spinner);
ArrayAdapter adapter = ArrayAdapter.createFromResource(this, R.array.spinner_data, android.R.layout.simple_spinner_dropdown_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);

【讨论】:

以上是关于Android Spinner 下拉箭头不显示的主要内容,如果未能解决你的问题,请参考以下文章

Android 下拉列表Spinner

Android零基础入门第46节:下拉框Spinner

android studio 的下拉菜单Spinner使用详解

【android编程】安卓的spinner下拉框怎么做到点击空白处关闭下拉框?

Android EditText+ListPopupWindow实现可编辑的下拉列表

Android微调器下拉图标不显示