如何使微调器宽度与最大可用项宽度相同

时间:2013-05-19 10:33:14

标签: android

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

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

enter image description here

如您所见,UnitedKingdom不合适。

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

enter image description here

如何在不明确选择最大项目的情况下,将微调器大小调整为最大可用项目宽度?

我的微调器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" />

7 个答案:

答案 0 :(得分:16)

您应该能够通过将下拉列表的宽度指定为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个项目,以确定它应该使用的宽度。

答案 1 :(得分:8)

我只是通过使用

“解决”问题
<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值,以确保下拉列表中的所有项都可见。

答案 2 :(得分:0)

将TextView放在Span 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);
        ...
        ...
            }

答案 3 :(得分: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>

答案 4 :(得分:0)

在这种情况下,您想列出所有国家或拥有大名单
尝试: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"/>

答案 5 :(得分: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" />

答案 6 :(得分:-7)

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