Intro:Spinner Innenpolster größer auf Android 6.0.1
Mit der neuen Version von Android 6.0.1, wie Android scheint machte einige Änderungen auf der Spinner-Komponente, da standardmäßig die innere Polsterung um die Karotte ist ein bisschen größer.
Ich bemerkte dies auf einer App, wo ich nichts im Code geändert habe, aber einfach das Betriebssystem auf dem Gerät aktualisiert und doch die Spinner haben unterschiedliche Größen.
Situation:
Ich habe 2 Spinnern eins neben dem anderen in einem RelativeLayout
(der Rest der Komponenten ausmacht, habe ich alles hinzugefügt, so dass Sie diesen Teil des Layouts sehen können - entfernt die völlig unnötig Eigenschaften oder Ansicht ids)
<RelativeLayout
android:id="@+id/header"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:id="@+id/container_for_buttons_on_the_right"
android:layout_width="wrap_content"
android:layout_height="48dp"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true">
<!-- Buttons here-->
</LinearLayout>
<android.support.v7.widget.AppCompatSpinner
android:id="@+id/spinner_1"
android:layout_width="wrap_content"
android:layout_height="48dp"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<ViewSwitcher
android:id="@+id/spinner_switch"
android:layout_width="wrap_content"
android:layout_height="48dp"
android:layout_toEndOf="@id/spinner_1"
android:layout_toLeftOf="@id/container_for_buttons_on_the_right"
android:layout_toRightOf="@id/spinner_1"
android:layout_toStartOf="@id/container_for_buttons_on_the_right"
android:inAnimation="@anim/fade_in"
android:outAnimation="@anim/fade_out">
<android.support.v7.widget.AppCompatSpinner
android:layout_width="wrap_content"
android:layout_height="match_parent" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<!-- ImageView properties are incomplete but I need it there.-->
</ViewSwitcher>
</RelativeLayout>
Das Layout durch den Spinner-Adapter für das getView()
verwendete Verfahren ist folgende:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="48dp"
android:orientation="horizontal"
android:paddingLeft="8dp"
android:paddingRight="8dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:ellipsize="end"
android:gravity="center_vertical"
android:singleLine="true"
tools:text="Test" />
<TextView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="0"
android:gravity="center"
android:paddingLeft="4dp"
android:singleLine="true"
android:textColor="@color/text_primary"
android:textSize="@dimen/text_size_body"
tools:ignore="RtlHardcoded,RtlSymmetry"
tools:text="7%" />
</LinearLayout>
am Beispiel:
Der Screenshot ist, genommen aus 2 separaten Screenshots kombiniert:
- Die auf der Oberseite auf einem Nexus 5 Gerät genommen wird auf Android 6.0
- Den Laufe eine unten ist auch auf einem Nexus 5 Gerät ABER auf Android 6.0.1
- EDIT 1
AppCompatSpinner von der Support-Bibliothek verwenden das Verhalten nicht ändern. Unterstützte Bibliothek Version ist 23.1.1
Wir mussten mehr Padding um den Down Caret hinzufügen, um einen Bug zu vermeiden, wenn der Ripple-Effekt angezeigt wird. Wenn Sie eine konstante Größe benötigen, kopieren Sie den Hintergrund aus dem Framework und verwenden Sie dieses oder verwenden Sie AppCompat. – alanv
Ich verwende AppCompat :). Können Sie mir sagen, wie genau diese Polsterung ist? Scheint mir, als wäre es um 8 oder 10? – Mike
Es ist 12dp End Padding und eine konstante 48dp End-ausgerichtete Lücke, die effektiv 12dp von Startpolsterung ist. Sie können direkt im Android SDK-Verzeichnis unter 'platforms/android-23/data/res/drawable/spinner_background_material.xml' nachsehen. – alanv