2013-08-14 11 views
16

Ich muss diese Teilgröße auf volle Anzeige Größe ändern. Wie kann ich das machen?Ändern Spinner DropDown Breite

Example image

Mein 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

bereiten spinner die einzige Ansicht, das in seinem horizontalen übergeordneten Layout. Ich meine, versuchen Sie, den roten Knopf neben ihm zu entfernen, um zu sehen, ob es hilft – arianoo

Antwort

3

Was Sie tun müssen, ist anstelle des Standard man einen benutzerdefinierten Adapter für das Drop-down-verwenden , wo Sie die "minimumWidth" jeder "Zeile" auf was auch immer Sie wollen:

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

Sie können natürlich mit "minimumWidth" spielen, um was auch immer Sie wollen; In diesem Beispiel ist es nur so eingestellt, dass es der Bildschirmbreite entspricht (obwohl ein intelligenterer Ansatz darin besteht, den Containerrahmen Ihrer App zu messen und dem anzupassen).

Dann den Adapter zu setzen:

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

danke, aber jetzt kann ich Ihre Antwort nicht akzeptieren, weil ich mich weigerte, diese – WOLVERINE

+3

Sie theoretisch in die Spinner selbst und usr setDropDownWidth, aber das zu implementieren würde immer noch einen benutzerdefinierten Adapter benötigen und nur auf Jellybean und höher funktionieren. –

63

Add Attribute in XML-Datei in Spinner-Tag

android: dropdown = "150dp"

+0

So einfach und doch so effektiv – Denny