Android设计窗口中Spinner(下拉选择器)不显示问题求助
嘿,作为Android开发新手碰到这种布局显示问题太正常啦,我来帮你梳理排查方向~从你提供的布局代码和问题截图来看,主要有几个可能的原因和解决办法:
首先先把你的布局代码贴出来方便分析:
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Text View!" android:paddingRight="100dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" android:id="@+id/brand" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="New Button" android:layout_below="@+id/color" android:layout_alignLeft="@+id/color" android:id="@+id/find_beer" /> <Spinner android:id="@+id/color" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:layout_marginTop="72dp" > </Spinner>
核心问题分析:布局属性混合使用
你会发现布局里同时出现了两种布局体系的属性:TextView用的是ConstraintLayout的约束属性(比如app:layout_constraintXXX),而Spinner和Button用的是RelativeLayout的定位属性(比如android:layout_below、android:layout_alignParentTop)。这种混合使用会让布局渲染引擎混乱,设计窗口根本不知道该按照哪种规则来显示控件,这大概率是Spinner不显示的主要原因。
具体解决步骤
统一布局根节点类型:
先确定你的布局根节点是ConstraintLayout还是RelativeLayout,然后把所有控件的属性统一:- 如果根节点是ConstraintLayout:把Spinner和Button的RelativeLayout属性删掉,换成ConstraintLayout的约束,比如给Spinner设置
app:layout_constraintTop_toTopOf="parent"、app:layout_constraintLeft_toLeftOf="parent"、app:layout_constraintRight_toRightOf="parent",再加上android:layout_marginTop="72dp";Button则可以约束在Spinner的下方,比如app:layout_constraintTop_toBottomOf="@+id/color"、app:layout_constraintLeft_toLeftOf="@+id/color"。 - 如果根节点是RelativeLayout:把TextView的ConstraintLayout属性删掉,换成RelativeLayout的属性,比如
android:layout_centerInParent="true"。
- 如果根节点是ConstraintLayout:把Spinner和Button的RelativeLayout属性删掉,换成ConstraintLayout的约束,比如给Spinner设置
给Spinner添加临时数据源:
设计窗口有时候需要看到具体的选项内容才会渲染Spinner的样式,你可以在布局里给Spinner加上默认的条目:<Spinner android:id="@+id/color" android:layout_width="wrap_content" android:layout_height="wrap_content" <!-- 其他属性保留 --> android:entries="@array/color_options" />然后在
res/values/arrays.xml文件里定义这个数组(如果没有arrays.xml就新建一个):<?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="color_options"> <item>红色</item> <item>蓝色</item> <item>绿色</item> </string-array> </resources>检查设计窗口的API版本:
有时候切换设计窗口顶部的API版本选择器(比如从33换成28),布局渲染会恢复正常,你可以多试几个版本看看。清理IDE缓存重启:
偶尔Android Studio的缓存会导致布局渲染异常,点击顶部菜单栏的File -> Invalidate Caches / Restart...,选择Invalidate and Restart,重启后再看设计窗口。
按照这些步骤调整后,Spinner应该就能在设计窗口正常显示啦~
内容的提问来源于stack exchange,提问作者user9744289

