web-dev-qa-db-fra.com

Supprimer l'espacement ou le rembourrage dans Android Spinner

J'utilise Android spinner et edittext à partir du support lib v21. Je voudrais aligner le texte à gauche le même que edittext comme indiqué dans la figure. Mais, spinner sourd incluent l'espacement ou le rembourrage. Donc, je voudrais le supprimer pour aligner le texte à gauche. S'il vous plaît aider comment l'enlever.

enter image description here

26
BomberBus

Dans votre 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;
}
17
Chan Chun Him

Essayez ci-dessous le code pour le faire. Changez l'attribut de style dans la disposition de votre élément de la liste de choix en textViewStyle comme ci-dessous

<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" />
3
Punit Shah

Si vous utilisez un adaptateur personnalisé, essayez de définir un remplissage dans getView():

@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;
}
2
Akshay Bhat 'AB'

Cet adaptateur multidisque supprime le remplissage gauche dans Android Spinner.

Version 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
    }
}

Vous pouvez également supprimer le rembourrage de spinner en xml

Seulement besoin de définir padding à 0dp.

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

La mise en page de TextView affichée dans votre Spinner provient de votre SpinnerAdapter, qui fournit 2 méthodes:

  • getView(position, convertView, parent): renvoie la vue pour l’état réduit, vous pouvez la remplacer pour retourner différentes présentations pour différents éléments sélectionnés
  • getDropdownView(position, convertView, parent): retourne la vue pour chaque élément de la liste déroulante à l'état développé (après avoir cliqué sur Spinner pour ouvrir une fenêtre contextuelle/un dialogue pour la sélection)

Dans votre cas, vous devez remplacer votre SpinnerAdapter.getView(position, convertView, parent) et gonfler la mise en page avec le rembourrage/espacement de votre choix.

Par exemple:

spinner.setAdapter(new MyAdapter());

MyAdapter.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/layout/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" />

Vous pouvez également utiliser facilement l'une des sous-classes SpinnerAdapter indirectes indirectes (ArrayAdapter<T>, BaseAdapter, CursorAdapter, ResourceCursorAdapter, SimpleAdapter, SimpleCursorAdapter, ThemedSpinnerAdapter) fournies par le cadre. Assurez-vous simplement de fournir la présentation correcte qui serait utilisée par la méthode getView().

1
hidro

Si vous ne voulez pas gâcher le code Java et le conserver dans des styles

Rechercher ce fichier (Cmd + Maj + O) abc_spinner_textfield_background_material.xml

et copier à votre projet. Supprimez toutes les valeurs inset de l 'élément racine et faites référence au fichier en tant que fond de votre disque.

Dans mon cas, cela ressemble à ceci (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>

et dans mon styles.xml, je l'utilise de cette façon

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

Essaye ça,

  1. Créez une mise en page personnalisée (selon vos besoins) pour la ligne de filage.

  2. gonflez la mise en page lorsque vous définissez l'adaptateur de données sur la roulette.

1
Heshan Sandeepa

dans votre onViewCreated ()

spinner.post { spinner.setPadding(0,0,0,0) } 
0
Jan Rabe

Peut-être que c'est la façon la plus simple et que ça marche. Pour diminuer le remplissage à gauche de Spinner, vous pouvez utiliser le réglage de remplissage à gauche de moins afin qu'il se déplace vers la gauche. Par exemple Android:layout_marginLeft="-8dp" Ce n'est pas une bonne pratique, mais un simple piratage. Voici un exemple de code:

<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" />

J'espère que cela t'aides.

0
azwar_akbar

Je viens de frapper cette question aussi. J'ai été en mesure de résoudre le problème en ajustant la marge au lieu de le rembourrer, donc définissez Android: marginStart = "0dp" sur l'élément Spinner.

0
Pete

Vous pouvez personnaliser votre propre correctif Spinner via Nine et spécifier un remplissage.

0
Badr