概念:spinner就是常用的下拉选择框,一般下拉框的宽度就是以item中最大的宽度的为宽度,spinner的宽度,如果在布局文件中写成固定宽度的话,就是那个固定值,如果是根据内容的话,就是item中最大的宽度。如果我们不做任何设置,spinner下拉框的字体和spinner的字体是一样的,下面就介绍怎么把spinner下拉框的字体和spinner的字体设置成不一样,spinner的宽度可以根据选择的下拉框item来动态的改变宽度。
注意:适配器中有两个方法,一个是getView(),这个是配置spinner的内容。还有一个getDropDownView()方法,这个是配置spinner下拉框的内容。
使用:(1)在getVIew()的方法中如果用 int p = spinner1.getSelectedItemPosition();
textView.setText(spinner1.getAdapter().getItem(p).toString());
这时spinner的宽度是根据选择的下拉框的item的内容来动态改变的。
(2)在getView()方法中如果用 p=position
textView.setText(spinner1.getAdapter().getItem(p).toString());
这时spinner的宽度是下拉框item的内容中的最大长度。
(3)XML文件中:
<com.example.dingjw.activity.CustomSpinner
android:id="@+id/spinner2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@null"
android:popupBackground="@drawable/ic_contact_popupwindow_background"
/>
popupBackground这个属性可以设置下拉框的背景,只不过一般的图片,你就看到好像是没有起作用,因为你设置的背景会被listview给挡住了,这里可以放一张只有边框有阴影效果的点九图片,就会有效果了。
例子:
/**
* 用于配置spinner选择的内容。
*
* @param position
* @param convertView
* @param parent
* @return
*/
@Override
public View getView(int position, View convertView, ViewHolder holder) {
TextView name =new TextView(context);
ContactLabel label = getItem(spinner.getSelectedItemPosition());
name.setText(label.name);
ViewGroup.LayoutParams params = convertView.getLayoutParams();
if(getSpinnerMaxWidth!=null){
int width=getSpinnerMaxWidth.getSpinnerMaxWidth(mContactType);
if (params != null) {
params.width = width;
}
}
return convertView;
}
/**
* 用于配置下拉框的item。
*
* @param position
* @param convertView
* @param parent
* @return
*/
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
View view;
TextView text;
if (convertView == null) {
view = mInflater.inflate(resource, parent, false);
mFieldId = view.getId();
} else {
view = convertView;
}
try {
if (mFieldId == 0) {
text = (TextView) view;
} else {
text = (TextView) view.findViewById(R.id.item_text);
}
} catch (ClassCastException e) {
Log.e("ArrayAdapter", e.toString());
throw new IllegalStateException("Id 类型必须为TextView", e);
}
ContactLabel item = getItem(position);
text.setText(item.name);
return view;
}