2012-08-22 24 views
6

lolandroid Spinner: center Text vertikal innerhalb Spinner

ich brauche diese Spinnereien, um vertikal den Text zentrieren. Ich habe in der Spinner xml Definition Sachen wie diese versucht:

<Spinner 
    android:id="@+id/dir_spn" 
    android:layout_gravity="center_vertical" 
    android:gravity="center_vertical" 
    android:layout_weight="1"/> 

Ich habe versucht, den Aufbau einer benutzerdefinierten Drop-Down-Layout:

<?xml version="1.0" encoding="utf-8"?> 
<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/text1" 
    style="@style/SpinnerDropDownItem" 
    android:singleLine="true" 
    android:layout_width="match_parent" 
    android:layout_height="?android:attr/listPreferredItemHeight" 
    android:ellipsize="marquee" /> 

styles.xml:

<resources> 
<style name="SpinnerDropDownItem"> 
    <item name="android:gravity">center_vertical</item> 
    <item name="android:layout_gravity">center_vertical</item> 
    <item name="android:textColor">?android:attr/textColorPrimary</item> 
    <item name="android:textColorHighlight">#FFFF9200</item> 
    <item name="android:textColorHint">?android:attr/textColorHint</item> 
    <item name="android:textColorLink">#5C5CFF</item> 
    <item name="android:textSize">16sp</item> 
    <item name="android:textStyle">normal</item> 
</style> 
</resources> 

Adapter Dropdown-Set :

adapter.setDropDownViewResource(R.layout.spinner_dropdown_item); 

ho w bekomme ich den Spinner-Text vertikal zentriert?

EDIT: kann es sich lohnen, zu erwähnen, dass die Aktivität im Manifest Motto ist so:

<resources> 
<style name="SpeakNSpell" parent="@android:style/Theme"> 
    <item name="android:minHeight">68sp</item> 
</style> 
</resources> 

, die alle Ansichten mindestens 68sp hoch macht. beeinflusst das auch den Text im Spinner?

+0

ich es auf die einfachste Form reduzieren würde und gehen von dort aus. Versuchen Sie es zuerst ohne den Stil und das ausgefallene Widget. Erstellen Sie ein einfaches TextView-Layout und stellen Sie die Schwerkraft auf center_vertical ein und prüfen Sie, ob das funktioniert. Außerdem ist das Dropdown-Layout * nicht * das, das angezeigt wird, wenn der Kreisel geschlossen ist (wie Sie es anzeigen). Vielleicht müssen Sie Ihren Stil auf das Layout anwenden, das verwendet wird, wenn der Spinner geschlossen ist? – Barak

+0

Ich sehe nicht die android: layout_width = "wrap_content" 'und' android: layout_height = "wrap_content" ' – slybloty

Antwort

8

Rewrite

Sie scheinen den Text vertikal in dem Artikel Ressource zum Zentrum zu wollen, weiter unten, aber Ihr Code-Beispiele zielt auf die Dropdown Menü ...

Compare Layouts

Die Top-Spinner ist das Standard-Layout von android simple_spinner_item und der Boden ist der gleiche, aber android:gravity="center_vertical" hinzugefügt.

<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/text1" 
    style="?android:attr/spinnerItemStyle" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:ellipsize="marquee" 
    android:gravity="center_vertical" 
    android:singleLine="true" /> 

Sie können sehen, dass ich Ihr Theme mit der großen minHeight verwendet habe. Hier ist ein einfaches Beispiel dieses Layout in einem Adapter zu verwenden:

Spinner spinner = (Spinner) findViewById(R.id.spinner); 
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.spinner_item, list); 
// set whatever dropdown resource you want 
spinner.setAdapter(adapter); 

ich mit der Annahme ging, die Sie „BAR“, „Produkt auswählen“ wollen, usw. von Ihrem Bild zentrierte, lassen Sie mich wissen, wenn Sie in dem Versuch, etwas anderes machen!

0

In Ihrem SpinnerAdapter so etwas wie dies versuchen:

public View getDropDownView(int position, View convertView, ViewGroup parent) { 
     View v = super.getDropDownView(position, convertView,parent); 
     ((TextView) v).setGravity(Gravity.CENTER); 
     return v; 
} 
3

Wenn jemand noch Probleme nach der Einstellung gravity hat, versuchen Polsterung der Spinner einzustellen:

   android:paddingTop="0dp" 
       android:paddingBottom="0dp" 
+0

Wenn ich diese 5 mal abstimmen könnte, würde ich. Ich verbrachte Stunden damit, mit dem Spinner zu kämpfen, um zu versuchen, sich zu benehmen und den Androiden zu ehren: gravity = "center_vertical", ohne Erfolg. Die Lösung war so einfach.Ich denke, der Grund, warum es sich schlecht benahm, war, dass ich das Hintergrund-Attribut auf einen 9-Patch setzte. Danach bestand die Spinnerin darauf, Textinhalte an die Spitze zu legen. Vielen Dank für diesen Beitrag. – Mitselplik