Spinner
创建一个自定义适配器,使用你自己的布局。因此,你只需要提供一个具有适当边距/填充的布局即可。
Spinner spinner = (Spinner) findViewById(R.id.myspinner);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.data, R.layout.spinner_item);
adapter.setDropDownViewResource(R.layout.spinner_dropdown_item);
spinner.setAdapter(adapter);
您可以在这里找到一个有效的示例。只需为您想要在下拉列表中显示的项创建单独的布局。
就像这样:
spinner_text_view.xml
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/customTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="15dp"
android:text="@string/sample_list_item"
android:textColor="@android:color/black"
android:textSize="20sp" />
然后在您的活动/片段中,您可以创建一个适配器(在这种情况下,为了简单起见,使用数组适配器),并将该布局传递给该适配器引用。最后将该适配器设置为微调器,您就可以获得所需的结果。
示例代码。
private void setupSpinner() {
String[] sampleSpinnerItems = {"One", "Two", "Three", "Four", "Five"};
ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<String>(this,
R.layout.spinner_text_view, sampleSpinnerItems);
sampleSpinner.setAdapter(spinnerAdapter);
}
Adapter
来完成这个操作,针对Spinner
。它会像这样:class YourAdapter extends BaseArrayAdapter<YourObject> {
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = inflater.inflate(R.layout.your_item, parent, false);
DropDownViewHolder holder = new DropDownViewHolder();
holder.root = convertView.findViewById(R.id.drop_down_root);
// other assignments etc.
convertView.setTag(holder);
}
DropDownViewHolder holder = (DropDownViewHolder) convertView.getTag();
int bottomPadding = 0;
int topPadding = 0;
if (position == 0) {
topPadding = getContext().getResources().getDimensionPixelSize(R.dimen.margin_8);
} else if (position == (getCount() - 1)) {
bottomPadding = getContext().getResources().getDimensionPixelSize(R.dimen.margin_8);
}
holder.root.setPadding(0, topPadding, 0, bottomPadding);
// other UI related logic etc.
return convertView;
}
// ...
public static class DropDownViewHolder {
View root;
// other views
}
}
VISIBLE
或者根据位置填充其他布局,但是对我来说,填充的解决方案似乎更加自然。实际上,您不需要为此使用自定义适配器。以下解决方案完美地解决了这个问题。
创建一个可绘制的 bg_spinner.xml
:
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="3dp" />
<padding
android:bottom="8dp"
android:top="8dp" />
<solid android:color="yourPopupColor" />
</shape>