56

我意识到即使我wrap_content用于我的微调器(我避免使用match_parent,因为我不希望微调器过长),并match_parent用于微调器的项目视图和下拉项目视图,

我仍然发现微调器的宽度与最大项目的宽度不同

在此处输入图像描述

如您所见,UnitedKingdom不适合。

所以,如果我选择UnitedKingdom,只有微调器会调整大小

在此处输入图像描述

即使没有明确选择最大的项目,如何使微调器调整到最大的可用项目宽度?

我的微调器 XML 是

<Spinner
    android:id="@+id/spinner1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginBottom="10dp" /> 

我的微调器的视图 XML 是

<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/text_view_0"
    style="?android:attr/spinnerItemStyle"
    android:singleLine="true"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:drawablePadding="10dp"
    android:gravity="center_vertical" />

<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/checked_text_view_0"
    style="?android:attr/spinnerDropDownItemStyle"
    android:singleLine="true"
    android:layout_width="match_parent"
    android:layout_height="48dp"
    android:minHeight="48dp"
    android:drawablePadding="10dp" />
4

7 回答 7

19

您应该能够通过将下拉列表的宽度指定为来获得所需的效果WRAP_CONTENT

<Spinner
    android:id="@+id/spinner1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginBottom="10dp"
    android:dropDownWidth="wrap_content"
    android:spinnerMode="dropdown" />

这将在微调器的适配器中测量多达 15 个项目,以确定它应该使用的宽度。

于 2014-08-22T03:53:14.237 回答
9

我只是通过使用“解决”问题

<Spinner
    android:id="@+id/country_spinner"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:minWidth="200dp"
    android:layout_marginBottom="10dp" />

200dp 只是 try-n-error 值,以确保下拉列表中的所有项目都可见。

于 2013-09-03T16:45:22.233 回答
3

在这种情况下,如果您想列出所有国家或有大列表,
请尝试:spinnerMode="dialog"如下所示:

<Spinner
    android:id="@+id/spinnerId"
    android:layout_width="wrap_content"
    android:dropDownWidth="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginBottom="10dp"
    android:spinnerMode="dialog"/>
于 2018-12-13T20:50:34.713 回答
0

将您的宽度设置为 0dp 并将布局权重设置为 1。以下将为您调整它的大小。

    <LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="?android:attr/actionBarSize"
    android:gravity="center">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/test label"/>

    <Spinner
        android:id="@+id/test_spinner"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:dropDownWidth="wrap_content"
        android:layout_weight="1"
        android:prompt="@string/test_prompt"
        android:spinnerMode="dropdown" />
</LinearLayout>
于 2018-09-10T21:38:17.153 回答
0

将您的 TextView 放在 Spinner Item XML 中的 LineanLayout 中,

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/text_view_0"
    style="?android:attr/spinnerItemStyle"
    android:singleLine="true"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:drawablePadding="10dp"
    android:gravity="center_vertical" />
</LinearLayout>

并将您的 TextView 的 id 传递给自定义适配器构造函数

CustomAdapter adapter = new CustomAdapter(this,R.layout.spinner_item,R.id.text_view_0,arraylist);

构造函数

  public CustomAdapter(Context context, int resource, int textViewId, ArrayList<String> resultList) {
                super(context, resource, textViewId, resultList);
        ...
        ...
            }
于 2015-12-30T08:38:17.810 回答
0

您可以尝试spinnerMode="dialog",但这只是一种解决方法,而不是正确的答案。因为它将显示一个带有对话框的新窗口。

所以这是解决方法。它会自动适应内容。

这在很大程度上取决于您如何设置自定义布局。我可以建议您编写自己的 xml 文件myspinner_custom_dropdown.xml。推荐的方式现在ConstraintLayout来自 androidX。

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <CheckedTextView
        android:id="@android:id/text1"
        style="?android:attr/spinnerDropDownItemStyle"
        android:layout_width="wrap_content"
        android:layout_height="50dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:ellipsize="marquee"
        android:singleLine="true"
        app:layout_constraintStart_toEndOf="@+id/item_image"
        app:layout_constraintTop_toTopOf="parent" />

    <ImageView
        android:id="@+id/item_image"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:src="@drawable/image"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

重要提示:您已将自定义布局与适配器一起使用

dataAdapter.setDropDownViewResource(R.layout.myspinner_custom_dropdown);

就是这样,您的微调器声明中不需要某些类型的硬核属性。

 <Spinner
            android:id="@+id/my_spinner"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginStart="8dp"
            android:layout_marginTop="8dp" />
于 2020-12-27T09:54:28.530 回答
-7

尝试这个:android:layout_width="fill_parent"

于 2013-05-19T11:05:40.143 回答