Android下拉列表箭头无法显示

24

我的片段背景是白色的,只有在我点击它时,旋转器的箭头才会显示。

这是我的Java文件中的代码片段:

    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_width="match_parent"
android:layout_height="wrap_content"
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_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:textAlignment="inherit"
android:textSize="16dp"
android:background="#FFFFFFFF"
android:textColor="#ff252525"/>

这是我的Spinner在我的Fragment中使用白色背景的效果: 白色背景 - Spinner 当我将背景颜色改为紫色时,它的样子如下所示: 紫色背景 - Spinner

11个回答

44

对我来说,这个方法很有效,而且更加简单:

<Spinner
      android:id="@+id/spinner"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      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);

希望这能够有所帮助 ;)


30

试试这个:

<Spinner
     android:id="@+id/spinnPhoneTypes"
     android:layout_width="0dp"
     style="@android:style/Widget.Spinner.DropDown"
     android:layout_height="@dimen/thirtyFive"
     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:width="1dp"
                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>

我该怎么做?我不太确定我要尝试这种方式。 - dark_illusion_909099
2
只是一个补充:如果你的drop_arrow是一个向量,你必须将<item><bitmap..部分更改为<item android:gravity="end" android:drawable="@drawable/drop_arrow" /> - Hibbem

24

检查是否为您的 Spinner 设置了背景,如果是,请将其移除,这样将解决问题。


如果我需要设置背景颜色并保留箭头怎么办? 对于这个问题,以下答案可以解决: https://dev59.com/oV4b5IYBdhLWcg3whSBC#56263841 - Chetan Gaikwad

11

只需在Spinner标签中添加主题,即可开始使用。

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

哇!它对我起作用了。 - Ajaz Ahmed

3
为了避免使用drawable,将spinner放在一个view中,并为该wrapper view设置背景颜色。例如:
<android.support.v7.widget.CardView
        android:id="@+id/cardView_spinner"
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:layout_margin="32dp"
        android:background="@color/white">

        <Spinner
            android:id="@+id/spinner"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

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

2
    <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="20dp"
            android:background="@drawable/edit_bg">
            <androidx.appcompat.widget.AppCompatSpinner
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                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>

0

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

 spinner.setBackgroundResource(R.drawable.spinner_img);

希望它有所帮助。

2
我尝试过这种方法,但是图片会覆盖整个旋转器。我希望箭头在旋转器的侧面。所以现在它看起来像这样; [https://www.dropbox.com/s/oe59pxiehktwdet/Screenshot_2015-03-12-15-10-42-1.png?dl=0] - dark_illusion_909099

0

移除您的Spinner的背景颜色,例如您可能设置了白色背景,这将不会显示下拉图标。


0
如果你正在添加背景颜色或资源,请将其更改为前景而不是背景。

Example (Wrong):

<Spinner
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="15dp"
android:background="@drawable/shape_yellow_bordered"
android:fontFamily="@font/palanquin_regular"
android:inputType="text" />

示例(真):

<Spinner
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="15dp"
android:foreground="@drawable/shape_yellow_bordered"
android:fontFamily="@font/palanquin_regular"
android:inputType="text" />


0

如果你正在使用Material Components主题,这对我也有效。

<Spinner
      android:id="@+id/spinner"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接