2012-08-22 24 views
6

lolSpinner systemu Android: tekst środkowy w pionie w obrębie pokrętła

Potrzebuję tych spinnerów, aby wyśrodkować tekst w pionie. Próbowałem rzeczy jak to w definicji xml Spinner:

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

Próbowałem budowania niestandardowych drop down układ:

<?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 rozwijana zadanej :

adapter.setDropDownViewResource(R.layout.spinner_dropdown_item); 

ho w jaki sposób tekst Prządka rozbiega się pionowo?

EDIT: może warto wspomnieć, że aktywny jest tematycznie w manifeście wygląda następująco:

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

co sprawia, że ​​wszystkie poglądy przynajmniej 68sp wysokie. czy dotyczy to również tekstu wewnątrz Spinnera?

+0

chciałbym sprowadzić do najprostszej postaci i go stamtąd. Najpierw spróbuj bez widżetu stylu i fantazyjnego. Stwórz prosty układ TextView i ustaw grawitację na center_vertical i sprawdź, czy to działa. Również układ rozwijania jest * nie * wyświetlany po zamknięciu obrotnicy (jak to pokazano). Być może musisz zastosować swój styl do układu używanego, gdy spinner jest zamknięty? – Barak

+0

Nie widzę twojego androida: layout_width = "wrap_content" i 'android: layout_height =" wrap_content "' – slybloty

Odpowiedz

8

Rewrite

Wydaje się, chcesz wyśrodkować tekst w pionie w zasobie element, pokazany poniżej, ale twoje przykłady kodu skierowany listę rozwijaną menu ...

Compare Layouts

górny Spinner jest domyślnym układem układu android_spinner_item, a dolna jest taka sama, ale dodano android:gravity="center_vertical".

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

Możesz zobaczyć, że użyłem Twojego motywu z dużym minHeight. Oto prosty przykład użyć tego układu w adapterze:

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); 

poszedłem z założenia, że ​​chcesz „środki pieniężne”, „Wybierz produkt”, etc od twój obraz wycentrowany, daj mi znać, jeśli gdzie próbuje zrobić coś innego!

0

w twojej SpinnerAdapter spróbować czegoś takiego:

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

Jeśli ktoś nadal ma problemy po ustawieniu gravity, spróbuj ustawić wyściółkę z Spinner:

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

Gdybym mógł oddać głos 5 razy, zrobiłbym to. Spędziłem godziny walcząc z Prządkiem, starając się, aby zachowywał się i honorował androida: gravity = "center_vertical" bezskutecznie. Rozwiązanie było tak proste jak to. – Mitselplik

Powiązane problemy