157 votes

Android : Comment redimensionner une vue personnalisée de manière programmatique ?

Je suis en train de coder une vue personnalisée, étendue à partir de RelativeLayout, et je veux la redimensionner de manière programmatique, comment puis-je faire ?

la classe de vue personnalisée est quelque chose comme :

public ActiveSlideView(Context context, AttributeSet attr){
        super(context, attr);
        LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        if(inflater != null){       
            inflater.inflate(R.layout.active_slide, this);
        }

241voto

Bastek Points 1159

Android lève une exception si vous n'indiquez pas la hauteur ou la largeur d'une disposition. Au lieu de créer un nouvel objet LayoutParams, utilisez l'objet original de la vue, de cette façon tous les autres paramètres sont conservés :

RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) someLayout.getLayoutParams();
params.height = 130;
someLayout.setLayoutParams(params);

120voto

herbertD Points 1721
this.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, theSizeIWant));

Problème résolu !

REMARQUE : Veillez à utiliser les LayoutParams du Layout parent. Le mien est LinearLayout.LayoutParams !

58voto

Mobistry Points 2902

Cela fonctionne pour moi :

ViewGroup.LayoutParams params = layout.getLayoutParams();
params.height = customHeight;
layout.requestLayout();

43voto

Danield Points 17720

Pour ce que ça vaut, disons que vous voulez redimensionner la vue dans pixels indépendants du dispositif ( dp ) : -

Vous devez utiliser une méthode appelée applyDimension qui est un membre de la classe TypedValue pour convertir les pixels en dps. Donc si je veux définir la hauteur à 150dp (disons) - alors je pourrais faire ceci :

float pixels = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 150, getResources().getDisplayMetrics());
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) someLayout.getLayoutParams();
params.height = (int) pixels;
someLayout.setLayoutParams(params);

où l'expression : getResources().getDisplayMetrics() obtient la densité/résolution de l'écran

5voto

zed_0xff Points 12379

Essayez celui-ci :

...
View view = inflater.inflate(R.layout.active_slide, this);
view.setMinimumWidth(200);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X