旋转器的顶部/底部填充

时间:2015-10-27 15:25:16

标签: android layout spinner

如何为Android中的微调器指定第一个/最后一个项目的顶部/底部的额外填充?参见下面的Goolge样本(8 dp间距)。 Google Simple Menu

6 个答案:

答案 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)

Spinner不支持多种视图类型。Issue

我建议您使用对话框显示列表。

被修改

根据您的评论解决了您使用此question

的问题

答案 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 属性。

这就像一个魅力,没有任何东西被切断等