it-swarm.com.de

Entfernen Sie Abstand oder Auffüllung in Android Spinner

Ich verwende Android Spinner und Edittext von Support Lib V21. Ich möchte den Text so ausrichten, dass er genauso wie edittext aussieht (siehe Abbildung). Zu den trägen Spinnern gehören jedoch Abstände oder Polsterungen. Ich möchte es entfernen, um den Text nach links auszurichten. Bitte helfen Sie, wie Sie es entfernen können.

enter image description here

26
BomberBus

In Ihrem 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

Versuchen Sie es mit dem folgenden Code. Ändern Sie das Stilattribut in Ihrem Spinner-Listenelement-Layout in textViewStyle (siehe unten)

<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

Wenn Sie einen benutzerdefinierten Adapter verwenden, versuchen Sie, die Auffüllung in getView() einzustellen:

@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

Dieser Array-Adapter entfernt die linke Auffüllung in Android Spinner.

Kotlin-Version:

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

Sie können auch die Auffüllung des Spinners in xml entfernen

Sie müssen nur die Auffüllung auf 0 dB einstellen.

    <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

Das Layout für TextView, das in Ihrer Spinner angezeigt wird, stammt von Ihrer SpinnerAdapter, die 2 Methoden bietet:

  • getView(position, convertView, parent): gibt View for collapsed state zurück. Sie können dies überschreiben, um verschiedene Layouts für verschiedene ausgewählte Elemente zurückzugeben
  • getDropdownView(position, convertView, parent): Ansicht für jedes Dropdown-Element im erweiterten Status zurückgeben (nachdem Sie auf Spinner geklickt haben, um das Popup/Dialogfeld zur Auswahl zu öffnen)

In Ihrem Fall sollten Sie Ihre SpinnerAdapter.getView(position, convertView, parent) überschreiben und das Layout mit Abstand/Abstand Ihrer Wahl aufpumpen.

Zum Beispiel:

spinner.setAdapter(new MyAdapter());

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

Sie können auch bequem eine der von SpinnerAdapter indirekten Unterklassen (ArrayAdapter<T>, BaseAdapter, CursorAdapter, ResourceCursorAdapter, SimpleAdapter, SimpleCursorAdapter, ThemedSpinnerAdapter) bereitgestellten Frameworks verwenden. Stellen Sie nur sicher, dass Sie das korrekte Layout angeben, das von der getView()-Methode verwendet wird.

1
hidro

Wenn Sie Java Code nicht verwirren wollen und ihn in Stilen haben möchten

Suchen Sie nach dieser Datei (Cmd + Shift + O) abc_spinner_textfield_background_material.xml

und in Ihr Projekt kopieren. Entfernen Sie alle inset - Werte aus dem root-Element und verweisen Sie die Datei als Hintergrund für Ihren Spinner.

In meinem Fall sieht es so aus (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>

und in meiner styles.xml verwende ich es auf diese Weise

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

Versuche dies,

  1. Erstellen Sie ein benutzerdefiniertes Layout (je nach Bedarf) für die Drehfeldreihe.

  2. blasen Sie das Layout auf, wenn Sie den Datenadapter auf den Spinner einstellen.

1
Heshan Sandeepa

in Ihrem onViewCreated ()

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

Vielleicht ist das der einfachste Weg und es funktioniert auch einfach. Um den linken Abstand von Spinner zu verringern, können Sie den Abstand von links nach minus einstellen, sodass er nach links verschoben wird. Zum Beispiel Android:layout_marginLeft="-8dp" Dies ist keine bewährte Methode, sondern nur ein einfacher Hack. Hier ist ein Codebeispiel:

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

Hoffe das hilft.

0
azwar_akbar

Ich habe auch dieses Problem getroffen. Ich konnte es lösen, indem der Rand tatsächlich angepasst wurde, anstatt aufgefüllt zu werden. Setzen Sie also Android: marginStart = "0dp" auf das Spinnerelement.

0
Pete

Sie können Ihren eigenen Spinner über Neun-Patch anpassen und die Auffüllung angeben

0
Badr