2013-08-14 18 views
16

muszę zmienić rozmiar tej wielkości części do pełnego ekranu. Jak mogę to zrobić?Zmień Spinner DropDown szerokość

Example image

Mój adapter:

String[] navigations = getResources().getStringArray(R.array.actionBar); 
     ArrayAdapter<String> adapter = new ArrayAdapter<String>(
       getBaseContext(), R.layout.custom_spinner_title_bar, 
       android.R.id.text1, navigations); 
     adapter.setDropDownViewResource(R.layout.custom_spinner_title_bar); 
     actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); 
     actionBar.setListNavigationCallbacks(adapter, navigationListener); 

custom_spinner_title_bar.xml:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/RelativeLayout1" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:gravity="fill_horizontal" 
    android:orientation="vertical" > 

    <TextView 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@android:id/text1" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:gravity="center" 
     android:padding="5dip" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:textColor="#FFFFFF" /> 

</RelativeLayout> 
+0

spróbować posiadające swoje spinner jedyny widok w poziomym układzie nadrzędnym. Mam na myśli spróbuj usunąć czerwony przycisk obok niego, aby sprawdzić, czy to pomaga – arianoo

Odpowiedz

3

Co trzeba zrobić, to użyć karty niestandardowej listy rozwijanej zamiast jednej domyślnej , gdzie można ustawić „minimumWidth” każdego „rzędu”, aby cokolwiek chcesz:

private class myCustomAdapter extends ArrayAdapter{ 
    private List<String> _navigations; 
    private int _resource; 
    private int _textViewResourceId; 

    public myCustomAdapter (Context context, int resource, int textViewResourceId, List<String> objects) { 
     super(context, resource, textViewResourceId, objects); 
     _navigations = objects; 
     _resource = resrouce; 
     _textViewResourceId = textViewResourceId; 
    } 

    @Override 
    public View getDropDownView(int position, View convertView, ViewGroup parent){ 
     View row; 
     LayoutInflater inflater=getLayoutInflater();    
     row = inflater.inflate(_resource, null); 
     TextView _textView = row.findViewById(_textViewResourceId); 
     _textView.setText(_navigations.get(position)); 


     Display display = getWindowManager().getDefaultDisplay(); 
     Point size = new Point(); 
     display.getSize(size); 
     int _width = size.x; 

     row.setMinimumWidth = _width; 
     return row; 
    } 
} 

Można oczywiście grać z „minimumWidth” być cokolwiek innego chcesz; W tym przykładzie jest on ustawiony tak, aby pasował do szerokości ekranu (choć mądrym podejściem byłoby zmierzenie ramki kontenera aplikacji i dopasowanie do niej).

Następnie ustawić adaptera:

myCustomAdapter adapter = new myCustomAdapter(getBaseContext(), R.layout.custom_spinner_title_bar,android.R.id.text1, navigations); 
+0

dziękuję, ale teraz nie mogę zaakceptować twojej odpowiedzi, ponieważ odmówiłem wdrożenia tej – WOLVERINE

+3

Możesz teoretycznie celować w samą przędzarkę i usr setDropDownWidth, ale to nadal wymagałoby niestandardowego adaptera i będzie działać tylko na Jellybean i wyżej. –

63

Dodaj atrybut w pliku xml w tagu Spinner

android: DropDownWidth = "150dp"

+0

Tak prosty, ale tak skuteczny – Denny