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.
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;
}
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" />
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;
}
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">
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ésgetDropdownView(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()
.
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>
Essaye ça,
Créez une mise en page personnalisée (selon vos besoins) pour la ligne de filage.
gonflez la mise en page lorsque vous définissez l'adaptateur de données sur la roulette.
dans votre onViewCreated ()
spinner.post { spinner.setPadding(0,0,0,0) }
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.
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.
Vous pouvez personnaliser votre propre correctif Spinner via Nine et spécifier un remplissage.