2013-08-14 17 views
16

Ho bisogno di ridimensionare questa dimensione della parte a pieno schermo. Come posso fare questo?Change Spinner DropDown width

Example image

mio adattatore:

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

provare con il tuo filatore l'unica vista nella sua disposizione genitore orizzontale. Voglio dire provare a rimuovere il pulsante rosso accanto ad esso per vedere se aiuta – arianoo

risposta

3

Quello che dovete fare è usare un adattatore personalizzato per la discesa al posto di quello di default , dove si imposta "minimumWidth" di ogni "riga" per quello che si desidera:

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

Ovviamente è possibile giocare con "minimumWidth" per qualsiasi altra cosa si desideri; In questo esempio è impostato solo per abbinare la larghezza dello schermo (anche se un approccio più intelligente sarebbe quello di misurare il telaio del contenitore dell'app e abbinarlo a quello).

Quindi per impostare l'adattatore:

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

grazie, ma ora non posso accettare la risposta, perché mi sono rifiutato di implementare questo – WOLVERINE

+3

Si potrebbe in teoria bersagliare lo spinner stesso e usr setDropDownWidth, ma che richiederebbe comunque un adattatore personalizzato e funzionerà solo su Jellybean e versioni successive. –

63

Aggiungi attributo nel file XML in tag Spinner

android: dropdownWidth = "150dp"

+0

Così semplice, ma così efficace – Denny