我意识到即使我使用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" />
答案 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"