2010-06-29 6 views
506

Comment puis-je définir la largeur et la hauteur d'un ImageView par programme?Définir la largeur et la hauteur de ImageView par programme?

+4

Aussi étrange que cela puisse paraître, cette information est assez difficile à trouver. La question mérite plus de votes. – phunehehe

+12

Note de bas de page pour toute personne aux prises avec ce problème provenant d'une autre plateforme. l'option ** "taille et forme pour s'adapter" ** est gérée magnifiquement dans Android; mais c'est difficile à trouver. vous voulez généralement un parent de largeur, un contenu de retour à la ligne, ** adjustViewBounds activé **, scale ** fitToCenter ** et cropToPadding ** false **. alors c'est automatique. J'espère vraiment que ça aide quelqu'un! – Fattie

+1

@JoeBlow - Merci l'homme !! Vous avez économisé beaucoup de temps pour moi – mango

Répondre

864

Il est peut-être trop tard, mais pour le bien des autres qui ont le même problème, pour régler la hauteur du ImageView:

image_view.getLayoutParams().height = 20; 

Hope this helps.

Important. Si vous réglez la hauteur après la mise en page a déjà été « aménagé », assurez-vous que vous appelez aussi:

image_view.requestLayout() 
+86

Si vous définissez la hauteur après que la mise en page a déjà été «mise en page», veillez à appeler image_view.requestLayout() –

+1

La réponse doit être modifiée pour inclure l'addenda par @Skripi – hosolmaz

+5

Et si j'ai besoin de wrap_content? –

185

Si votre point de vue d'image est dynamique, la réponse contenant getLayout échouera avec nul exception.

Dans ce cas, la façon correcte est la suivante:

LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(100, 100); 
iv.setLayoutParams(layoutParams); 
+5

si je mets ce code mon image disparaît. Pourquoi?\t \t \t \t ImageView imgLogo = nouvelle ImageView (this); \t \t \t \t \t \t \t \t imgLogo.setImageDrawable (logo); \t \t \t \t LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams (32,32); \t \t \t \t imgLogo.setLayoutParams (layoutParams); \t row.addView (imgLogo); –

+2

Merci pour cette réponse, mettez-moi sur la bonne voie. En tant que note ajoutée, LinearLayout doit être défini sur le type de vue parent de l'image. Par exemple, si votre vue d'image se trouve dans une galerie, vous devez utiliser les paramètres de disposition de la galerie au lieu de LinearLayout, sinon vous aurez des exceptions. – dubj

+3

@ MustafaGüven J'ai eu le même problème que vous, où 'ImageView' disparaît. L'astuce consiste à faire en sorte que la partie layout (c'est-à-dire ' .LayoutParams') soit la même que celle du parent de' ImageView'. Ainsi, par exemple, si vous avez placé 'ImageView' dans un' TableRow' dans un 'TableLayout', vous devriez l'avoir comme TableRow.LayoutParams'. – user2323030

40

De cette façon simple tâche:

setContentView(R.id.main);  
ImageView iv = (ImageView) findViewById(R.id.left); 
int width = 60; 
int height = 60; 
LinearLayout.LayoutParams parms = new LinearLayout.LayoutParams(width,height); 
iv.setLayoutParams(parms); 

et une autre façon, si vous voulez donner la taille de l'écran en hauteur et en largeur puis utilisez ci-dessous code:

setContentView(R.id.main);  
Display display = getWindowManager().getDefaultDisplay(); 
ImageView iv = (LinearLayout) findViewById(R.id.left); 
int width = display.getWidth(); // ((display.getWidth()*20)/100) 
int height = display.getHeight();// ((display.getHeight()*30)/100) 
LinearLayout.LayoutParams parms = new LinearLayout.LayoutParams(width,height); 
iv.setLayoutParams(parms); 

espérons utiliser pleinement à vous.

4
image_view.getLayoutParams().height 

renvoie la valeur de hauteur en pixels. Vous devez d'abord obtenir les dimensions de l'écran pour définir correctement les valeurs.

Display display = context.getWindowManager().getDefaultDisplay(); 
DisplayMetrics outMetrics = new DisplayMetrics(); 
display.getMetrics(outMetrics); 
int screen_height = outMetrics.heightPixels; 
int screen_width = outMetrics.widthPixels; 

Une fois que vous obtenez les dimensions de l'écran, vous pouvez définir la largeur de imageview & hauteur à l'aide des marges appropriées.

view.getLayoutParams().height = screen_height - 140; 
view.getLayoutParams().width = screen_width - 130 ; 
7

Le meilleur et le plus simple pour fixer un bouton est dynamiquement

Button index=new Button(this); 
int height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 45, getResources().getDisplayMetrics());    
int width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 42, getResources().getDisplayMetrics()); 

La hauteur et la largeur en pixels ci-dessus sont px. 45 étant la hauteur en dp et 42 étant la largeur en dp.

index.setLayoutParams(new <Parent>.LayoutParams(width, height)); 

Ainsi, par exemple, si vous avez placé votre bouton dans un TableRow dans un TableLayout, vous devriez avoir comme TableRow.LayoutParams

index.setLayoutParams(new TableRow.LayoutParams(width, height)); 
8

Si vous devez régler votre largeur ou la hauteur à match_parent (aussi grand que son parent) ou wrap_content (assez grand pour son propre contenu interne), puis ViewGroup.LayoutParams a ces deux constantes:

imageView.setLayoutParams(
    new ViewGroup.LayoutParams(
     // or ViewGroup.LayoutParams.WRAP_CONTENT 
     ViewGroup.LayoutParams.MATCH_PARENT,  
     // or ViewGroup.LayoutParams.WRAP_CONTENT,  
     ViewGroup.LayoutParams.MATCH_PARENT)); 

Ou vous pouvez les définir comme dans Hakem Zaied de answer:

imageView.getLayoutParams().width = ViewGroup.LayoutParams.MATCH_PARENT; 
//... 
+0

osm .... ................... –

4

créer simplement un objet LayoutParams et l'affecter à votre imageView

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(150, 150); 
imageView.setLayoutParams(params); 
18

J'ai joué celui-ci avec pixel et dp.

private int dimensionInPixel = 200; 

Comment définir par pixel :

view.getLayoutParams().height = dimensionInPixel; 
view.getLayoutParams().width = dimensionInPixel; 
view.requestLayout(); 

Comment définir par dp:

int dimensionInDp = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dimensionInPixel, getResources().getDisplayMetrics()); 
view.getLayoutParams().height = dimensionInDp; 
view.getLayoutParams().width = dimensionInDp; 
view.requestLayout(); 

Espoir cela vous aidera.

+1

Comment ferais-je cela pour une valeur dp spécifique (c'est-à-dire ne pas convertir de px en dp)? – alxcyl

4

Vous pouvez définir une valeur pour tous les cas.

demoImage.getLayoutParams().height = 150; 

demoImage.getLayoutParams().width = 150; 

demoImage.setScaleType(ImageView.ScaleType.FIT_XY); 
Questions connexes