Comment puis-je définir ImageView
la largeur et la hauteur d'un par programmation?
Comment puis-je définir ImageView
la largeur et la hauteur d'un par programmation?
Réponses:
Il peut être trop tard mais pour le bien des autres qui ont le même problème, pour régler la hauteur de l'ImageView:
imageView.getLayoutParams().height = 20;
J'espère que cela t'aides.
Important. Si vous définissez la hauteur après que la mise en page a déjà été «mise en page», assurez-vous d'appeler également:
imageView.requestLayout();
image_view.getLayoutParams().height = RelativeLayout.LayoutParams.WRAP_CONTENT
.. Si le parent de vue est LinearLayout
remplacé RelativeLayout
par
Si votre vue d'image est dynamique, la réponse contenant getLayout échouera avec une exception nulle.
Dans ce cas, la bonne façon est:
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(100, 100);
iv.setLayoutParams(layoutParams);
ImageView
disparaît. L'astuce consiste à faire en sorte que la partie mise en page (c'est-à-dire <this_part_here>.LayoutParams
) soit la même que celle du parent de l' élément ImageView
. Ainsi, par exemple, si vous avez placé votre ImageView
dans un TableRow
dans un TableLayout
, vous devriez l'avoir comme TableRow.LayoutParams
.
Cette façon simple de faire votre 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 d'une autre manière si vous voulez donner une taille d'écran en hauteur et en largeur, utilisez le code ci-dessous:
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);
j'espère vous en servir pleinement.
int
-ils des variables si elles ne seront pas réutilisées ailleurs? Semble inutile mais je ne sais pas grand-chose à ce sujet.
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();
J'espère que cela vous aidera.
Si vous devez définir votre largeur ou hauteur sur match_parent
(aussi grand que son parent) ou wrap_content
(assez grand pour s'adapter à son propre contenu interne), alors 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 la réponse de Hakem Zaied :
imageView.getLayoutParams().width = ViewGroup.LayoutParams.MATCH_PARENT;
//...
Vous pouvez définir une valeur pour tous les cas.
demoImage.getLayoutParams().height = 150;
demoImage.getLayoutParams().width = 150;
demoImage.setScaleType(ImageView.ScaleType.FIT_XY);
Le moyen le plus simple et le plus simple de définir un bouton dynamiquement est
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 ci-dessus sont en pixels 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 l'avoir comme TableRow.LayoutParams
index.setLayoutParams(new TableRow.LayoutParams(width, height));
Créez simplement un objet LayoutParams et affectez-le à votre imageView
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(150, 150);
imageView.setLayoutParams(params);
image_view.getLayoutParams().height
renvoie la valeur de la 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;
Après avoir obtenu les dimensions de l'écran, vous pouvez définir la largeur et la hauteur de la vue d'image en utilisant les marges appropriées.
view.getLayoutParams().height = screen_height - 140;
view.getLayoutParams().width = screen_width - 130 ;
Afin de définir l'ImageView et la hauteur par programme, vous pouvez faire
//Makesure you calculate the density pixel and multiply it with the size of width/height
float dpCalculation = getResources().getDisplayMetrics().density;
your_imageview.getLayoutParams().width = (int) (150 * dpCalculation);
//Set ScaleType according to your choice...
your_imageview.setScaleType(ImageView.ScaleType.CENTER_CROP);
kotlin
val density = Resources.getSystem().displayMetrics.density
view.layoutParams.height = 20 * density.toInt()
Dans le scénario où la taille du widget doit être définie par programme, vérifiez les règles ci-dessous.
LayoutParam
la disposition dans laquelle vous ajoutez cette vue . Dans mon cas, j'ajoute TableRow
donc je devais faireTableRow.LayoutParams
final float scale = getResources().getDisplayMetrics().density;
int dpWidthInPx = (int) (17 * scale);
int dpHeightInPx = (int) (17 * scale);
TableRow.LayoutParams deletelayoutParams = new TableRow.LayoutParams(dpWidthInPx, dpHeightInPx);
button.setLayoutParams(deletelayoutParams);
tableRow.addView(button, 1);
Si vous souhaitez simplement ajuster l'image dans la vue d'image, vous pouvez utiliser le "contenu enveloppé" dans la propriété de hauteur et de largeur avec le type d'échelle, mais si vous souhaitez définir manuellement, vous devez utiliser LayoutParams.
Layoutparams est efficace pour définir la hauteur et la largeur de la disposition par programme.
int newHeight = 150;
int newWidth = 150;
holder.iv_arrow.requestLayout();
holder.iv_arrow.getLayoutParams().height = newHeight;
holder.iv_arrow.getLayoutParams().width = newWidth;
holder.iv_arrow.setScaleType(ImageView.ScaleType.FIT_XY);
holder.iv_arrow.setImageResource(R.drawable.video_menu);