答案 0 :(得分:3)
您需要使用自定义布局为Spinner
创建自定义适配器。因此,您只需要提供具有适当边距/ paddins的布局。
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);
您可以找到有效示例here。
答案 1 :(得分:3)
答案 2 :(得分:1)
只需为要在微调器中显示的项目创建单独的布局。
像这样的东西
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" />
然后在您的activity / fragment中,您可以创建一个适配器(在这种情况下,数组适配器很简单)并将此布局传递给该适配器引用。最后将该适配器设置为微调器,您可以获得所需的结果。
示例代码。
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);
}
希望这有帮助。
注意:spinner_text_view是您之前创建的布局文件。
答案 3 :(得分:1)
您需要为此布局和自定义布局定制适配器。 您可以使用2种布局。假设您有n个要显示的元素,在您的微调器中您将有n + 2。 iF位置为0(第一个元素)或最后一个元素,您将显示空布局,否则您将显示其他布局。 您将用于创建此空间的空布局
答案 4 :(得分:1)
您可以使用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
或根据位置对某些其他布局进行膨胀,但带填充的解决方案对我来说似乎更自然。
答案 5 :(得分:0)
您实际上不需要为此使用自定义适配器。以下解决方案非常有效。
创建可绘制的 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>
然后在 XML 中为您的 android:popupBackground="@drawable/bg_spinner_popup"
设置 Spinner
属性。
这就像一个魅力,没有任何东西被切断等