今天碰到一个spinner在华为mate10上显示异常的问题。如下图
正常显示应该是这样的 如下图
回顾下spinner的用法
一.布局文件中配置
<Spinner
android:paddingRight="20dp"
style="@style/spinner_bg"
android:id="@+id/Setting_spinner"
android:layout_width="80dp"
android:layout_height="25dp"
android:layout_marginLeft="15dp"
android:layout_marginTop="2dp"
/>
样式是自定义的样式,更改了默认的背景。
二,添加一个下拉列表项的list,这里添加的项就是下拉列表的菜单项
list.add("5 秒");
list.add("10 秒");
list.add("30 秒");
list.add("1分钟");
list.add("5分钟");
list.add("10分钟");
list.add("30分钟");
三 为下拉列表定义一个适配器,这里就用到里前面定义的list。
final ArrayAdapter adapter = new ArrayAdapter(this,
R.layout.simple_spinner, list);
上面的simple_spinner也是一个自定义的布局文件,这样的目的是可以更改菜单项内容的字体颜色 大小等内容
simple_spinner的全部内容
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
style="?android:attr/spinnerItemStyle"
android:singleLine="true"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:ellipsize="marquee"
android:layout_alignParentLeft="true"
android:gravity="center"
android:textColor="#ffffff"
android:textAlignment="inherit"/>
四,为适配器设置下拉列表下拉时的菜单样式。
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
五 将适配器添加到下拉列表上
setting_spinner.setAdapter(adapter);
六 设置点击事件
setting_spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
time_interval = (String) adapter.getItem(position);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
注意上面的第四部,simple_spinner_dropdown_item是系统自带的布局文件,咱们刚开始谈论的问题就是因为这个引起的,将这个布局里面的内容拷贝出来,自定义一个布局文件,将内容拷贝进去
如下
adapter.setDropDownViewResource(R.layout.simple_spinner_dropdown_item);
simple_spinner_dropdown_item的内容
<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
style="?android:attr/spinnerDropDownItemStyle"
android:singleLine="true"
android:layout_alignParentRight="true"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="marquee"/>
再次运行软件,发现问题搞定。。