在android Spinner中删除Spacing或Padding

问题描述 投票:27回答:11

我正在使用android spinner和来自支持lib v21的edittext。我想将文本对齐,就像edittext一样,如图所示。但是,狡猾的旋转器包括间距或填充。所以,我想删除它以将文本对齐到左边。请帮助如何删除它。

android spinner
11个回答
22
投票

在你的SpinnerAdapter中:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
        View view = super.getView(position, convertView, parent);
        view.setPadding(0, view.getPaddingTop(), view.getPaddingRight(), view.getPaddingBottom());
        return view;
}

0
投票

也许这是最简单的方式,也只是工作。要减少Spinner的左边距,你可以使用set padding left to minus,这样它就会向左移动。例如android:layout_marginLeft="-8dp"这不是一个最佳实践,只是一个简单的黑客。这是一个代码示例:

<Spinner
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="left"
android:layout_marginLeft="-8dp"
android:entries="@array/arr_tipe_kendaraan"
android:gravity="left"
android:paddingTop="14dp"
android:paddingBottom="8dp"
android:prompt="@string/action_sign_in"
android:spinnerMode="dialog" />

希望这可以帮助。


-1
投票

这对我有用

Spinner spn = (Spinner) findViewById(R.id.spn);

spn.setPadding(0, spn.getPaddingTop(), spn.getPaddingRight(), spn.getPaddingBottom());

2
投票

请尝试以下代码。将微调器列表项布局中的样式属性更改为textViewStyle,如下所示

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/text1"
    style="?android:attr/textViewStyle"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:singleLine="false"
    android:textAlignment="inherit"
    android:textAppearance="?android:attr/textAppearanceMedium" />

2
投票

此数组适配器删除Android Spinner中的左边距。

Kotlin版本:

open class NoPaddingArrayAdapter<T>(context: Context, layoutId: Int, items: List<T>?) : ArrayAdapter<T>(context, layoutId, items) {

    override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View? {
        val view = super.getView(position, convertView, parent)
        view.setPadding(0,view.paddingTop,view.paddingRight,view.paddingBottom)
        return view
    }
}

1
投票

试试这个,

  1. 为微调器行创建自定义布局(根据需要)。
  2. 将数据适配器设置为微调器时,会使布局膨胀。

1
投票

TextView中显示的Spinner布局来自你的SpinnerAdapter,它提供了两种方法:

  • getView(position, convertView, parent):返回折叠状态的视图,您可以覆盖它以返回不同选定项目的不同布局
  • getDropdownView(position, convertView, parent):返回展开状态下每个下拉项的视图(单击Spinner打开弹出/对话框以供选择)

在您的情况下,您应该覆盖您的SpinnerAdapter.getView(position, convertView, parent)并使用您选择的填充/间距来扩充布局。

例如:

spinner.setAdapter(new MyAdapter());

my adapter.Java

class MyAdapter implements SpinnerAdapter {
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == null) {
            convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.spinner_item, parent, false);
        }
        // bind your data here
        return convertView;
    }
    // other implementation
}

RES /布局/ spinner_item.xml

<!-- set padding margin whatever here -->
<TextView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

您也可以方便地使用SpinnerAdapter indirect subclassesArrayAdapter<T>, BaseAdapter, CursorAdapter, ResourceCursorAdapter, SimpleAdapter, SimpleCursorAdapter, ThemedSpinnerAdapter)提供的框架之一,只需确保提供getView()方法使用的正确布局。


1
投票

如果你不想搞乱Java代码并且在样式中使用它

搜索此文件(Cmd + Shift + O)abc_spinner_textfield_background_material.xml

并复制到您的项目。从根元素中删除所有插入值,并将该文件作为微调器的背景引用。

就我而言,它看起来像这样(drawable/spinner_background.xml

<inset xmlns:android="http://schemas.android.com/apk/res/android">
    <selector>
        <item
            android:state_checked="false"
            android:state_pressed="false">
            <layer-list>
                <item android:drawable="@drawable/abc_textfield_default_mtrl_alpha" />
                <item android:drawable="@drawable/abc_spinner_mtrl_am_alpha" />
            </layer-list>
        </item>
        <item>
            <layer-list>
                <item android:drawable="@drawable/abc_textfield_activated_mtrl_alpha" />
                <item android:drawable="@drawable/abc_spinner_mtrl_am_alpha" />
            </layer-list>
        </item>
    </selector>
</inset>

在我的styles.xml中,我用这种方式

<style name="DxSpinner" parent="@style/Widget.AppCompat.Spinner.Underlined">
    <item name="android:background">@drawable/spinner_background</item>
</style>

1
投票

您还可以在xml中删除微调器的填充

只需要将填充设置为0dp。

    <Spinner
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="left"
        android:padding="0dp"     
        android:id="@+id/my_spinner">

0
投票

我刚刚也遇到了这个问题。我能够通过实际调整边距而不是填充来解决它,因此将android:marginStart =“0dp”设置为微调项目。


0
投票

在你的onViewCreated()

spinner.post { spinner.setPadding(0,0,0,0) } 
© www.soinside.com 2019 - 2024. All rights reserved.