web-dev-qa-db-fra.com

Changer la largeur de DropDown de Spinner

J'ai besoin de redimensionner cette taille de pièce pour un affichage complet. Comment puis-je faire ceci?

Example image

Mon adaptateur:

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>
22
WOLVERINE

Ajouter un attribut dans le fichier xml dans la balise Spinner

Android:dropDownWidth="150dp"
86
Umar Nafeez

Ce que vous devez faire est d'utiliser un adaptateur personnalisé pour le menu déroulant au lieu de celui par défaut, où vous définissez la "largeur minimale" de chaque "ligne" à tout ce que vous voulez:

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

Vous pouvez bien sûr jouer avec "minimumWidth" pour être ce que vous voulez d'autre; Dans cet exemple, il est juste réglé pour correspondre à la largeur de l'écran (bien qu'une approche plus intelligente serait de mesurer le cadre de conteneur de votre application et de le faire correspondre à cela).

Ensuite, pour configurer l'adaptateur:

myCustomAdapter adapter = new myCustomAdapter(getBaseContext(), R.layout.custom_spinner_title_bar,Android.R.id.text1, navigations);   
3
Elad Avron