如何去除Android Spinner中的多余空白?已尝试方案无效
解决Spinner中+41后多余空白导致文本截断的问题
看起来你在Spinner的文本排版上卡壳了——+41后面的多余空白把"Mobiltelefonnummer"挤得截断了,而且常规的padding设置完全没效果对吧?我给你几个针对性的解决方案:
1. 自定义Spinner Item布局(最推荐)
系统默认的Spinner item布局自带隐藏的内边距和间距,这大概率是问题根源。别用系统默认的android.R.layout.simple_spinner_item,自己写个完全可控的item布局:
创建res/layout/spinner_custom_item.xml:
<TextView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingStart="0dp" android:paddingEnd="0dp" android:textSize="16sp" android:gravity="center_vertical" android:singleLine="true"/>
然后在初始化Adapter时指定这个自定义布局:
ArrayAdapter<String> adapter = new ArrayAdapter<>(this, R.layout.spinner_custom_item, yourPhoneNumberList); // 如果下拉弹窗也需要同样的样式,记得设置下拉布局 adapter.setDropDownViewResource(R.layout.spinner_custom_item); spinCo.setAdapter(adapter);
2. 检查数据源+调整Spinner属性
- 先确认你的数据源里,+41后面是不是本身就带空格?如果是,初始化Adapter前先清理文本:
List<String> cleanedData = new ArrayList<>(); for (String number : originalDataList) { cleanedData.add(number.trim()); }
- 给Spinner添加
android:overlapAnchor="true"属性,让下拉框和Spinner本体对齐,减少额外的留白:
<Spinner android:id="@+id/spinCo" android:layout_width="wrap_content" android:layout_height="wrap_content" android:overlapAnchor="true" android:paddingStart="0dp" android:paddingEnd="0dp"/>
3. 精准控制自定义Adapter的子View
你之前的代码只调整了整个Item View的padding,但真正承载文本的是View内部的TextView。修改你的getView方法,直接找到文本控件调整:
@Override public View getView(int position, View convertView, @NonNull ViewGroup parent) { View v = super.getView(position, convertView, parent); // 系统默认item的TextView id是android.R.id.text1 TextView textView = v.findViewById(android.R.id.text1); if (textView != null) { // 清空左右内边距,保留上下padding保证排版美观 textView.setPadding(0, textView.getPaddingTop(), 0, textView.getPaddingBottom()); } v.setPadding(0, v.getPaddingTop(), 0, v.getPaddingBottom()); return v; }
优先试试自定义Item布局的方案,这是最彻底解决系统默认样式限制的方法。
内容的提问来源于stack exchange,提问作者Aadit33
相关产品推荐
相关产品推荐

