Par défaut, la largeur de la spinner est définie pour s'adapter à l'élément le plus important de la liste déroulante, mais je veux qu'elle soit la même largeur que l'élément sélectionné.
<android.widget.Spinner android:id="@+id/tab_spinner" android:layout_width="wrap_content" android:layout_height="match_parent" android:entries="@array/countries" />
3 Réponses :
Réglage des fileurs XML sur:
android:layout_width="wrap_content"
Désolé j'ai oublié de poster mon code, mais c'était déjà comme ça et n'a rien changé pour moi ...
Par défaut, Un moyen de résoudre le problème consiste à vous assurer que votre Je peux penser à deux solutions possibles: p> Assurez-vous d'utiliser ceci dans votre présentation code> XML code>, au lieu d'un Soyez prudent que Soyez prudent que spinner code> essaiera de mesurer certaines de vos vues déroulantes et d'utiliser la largeur maximale trouvée. Cela se produit dans
Spinner # MeseutrecontentWidth () Code>, un
Protected code> méthode de
Spinner code> appelé in
Spinner # OnMeasure () Code>.
spinneradapter # greview () code> méthode utilise toujours
Spinner # GetSelectedItemposition () code> pour son
Position code > Argument. P>
normal code> code> . p>
dynamicwidthspinner # getAdapter () code> retournera un
wrapperspinneradapter code>; Utilisez son
getbaseadapter () code> pour accéder à votre adaptateur. p>
parent code> in
greview () code> pourrait ne pas toujours être un
Spinner code> . P>
private class SimpleSpinnerAdapter extends BaseAdapter {
private LayoutInflater mInflater;
private int mResource;
public SimpleSpinnerAdapter(Context context, int resource) {
mInflater = LayoutInflater.from(context);
mResource = resource;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
return createViewFromResource(
mInflater,
((Spinner) parent).getSelectedItemPosition(),
convertView,
parent,
mResource);
}
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
return createViewFromResource(
mInflater,
position,
convertView,
parent,
mResource);
}
protected View createViewFromResource(LayoutInflater inflater, int position,
View convertView, ViewGroup parent,
int resource) {
View view;
if (convertView == null) {
view = inflater.inflate(resource, parent, false);
} else {
view = convertView;
}
bindView(position, view);
return view;
}
protected void bindView(int position, View view) {
// Bind your view.
}
// getCount(), getItem(), and getItemId() methods.
}
La première option est la plus flexible
La première option ne fonctionne pas pour moi. Lorsque je l'implémente (et je devais le modifier pour Kotlin et le code manquant dans la fonction code> greveView code>) Le spinner ne répond pas aux événements de TAP et la flèche déroulante a disparu. Je vais mettre mon code actuel dans une réponse ci-dessous. J'utilise un TextView personnalisé comme élément de spinner
@jpmcosta j'ai mis mon code dans une nouvelle question ici: Stackoverflow.com/questions/56998198/...
ViewGroup.LayoutParams spinnerLayoutParams = spinner.getLayoutParams(); spinnerLayoutParams.width -= 1; spinner.setLayoutParams(spinnerLayoutParams); Do this is on item selected
La valeur "-1" est match_parent. Pourquoi cela pourrait-il aider?