Como posso definir ImageView
a largura e a altura de uma programação?
Como posso definir ImageView
a largura e a altura de uma programação?
Respostas:
Pode ser tarde demais, mas para o bem de outras pessoas com o mesmo problema, defina a altura do ImageView:
imageView.getLayoutParams().height = 20;
Espero que isto ajude.
Importante. Se você estiver definindo a altura após o layout já ter sido 'disposto', lembre-se de ligar para:
imageView.requestLayout();
image_view.getLayoutParams().height = RelativeLayout.LayoutParams.WRAP_CONTENT
.. Se o pai vista é LinearLayout
substituir a RelativeLayout
com ele
Se a visualização da imagem for dinâmica, a resposta que contém getLayout falhará com exceção nula.
Nesse caso, a maneira correta é:
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(100, 100);
iv.setLayoutParams(layoutParams);
ImageView
desaparece. O truque é fazer com que a parte do layout (ou seja <this_part_here>.LayoutParams
) seja a mesma que o pai da pessoa ImageView
. Então, por exemplo, se você colocou seu ImageView
dentro de um TableRow
dentro de a TableLayout
, deve tê-lo como TableRow.LayoutParams
.
Esta maneira simples de executar sua tarefa:
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);
e de outra maneira, se você quiser especificar o tamanho da tela em altura e largura, use o código abaixo:
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);
Espero que use completo para você.
int
variáveis se não serão reutilizadas em outro lugar? Parece desnecessário, mas eu não sei muito sobre isso tbh.
Eu joguei este com pixel
e dp
.
private int dimensionInPixel = 200;
Como definir por pixel :
view.getLayoutParams().height = dimensionInPixel;
view.getLayoutParams().width = dimensionInPixel;
view.requestLayout();
Como definir por dp :
int dimensionInDp = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dimensionInPixel, getResources().getDisplayMetrics());
view.getLayoutParams().height = dimensionInDp;
view.getLayoutParams().width = dimensionInDp;
view.requestLayout();
Espero que isto te possa ajudar.
Se você precisar definir sua largura ou altura para match_parent
(tão grande quanto seu pai) ou wrap_content
(grande o suficiente para caber em seu próprio conteúdo interno), então existem ViewGroup.LayoutParams
duas 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 você pode configurá-los como na resposta de Hakem Zaied :
imageView.getLayoutParams().width = ViewGroup.LayoutParams.MATCH_PARENT;
//...
Você pode definir o valor para todos os casos.
demoImage.getLayoutParams().height = 150;
demoImage.getLayoutParams().width = 150;
demoImage.setScaleType(ImageView.ScaleType.FIT_XY);
A melhor e mais fácil maneira de definir um botão dinamicamente é
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());
A altura e largura acima estão em pixels px . 45 sendo a altura em dp e 42 sendo a largura em dp .
index.setLayoutParams(new <Parent>.LayoutParams(width, height));
Portanto, por exemplo, se você colocou seu botão em um TableRow em um TableLayout, deve tê-lo como TableRow.LayoutParams
index.setLayoutParams(new TableRow.LayoutParams(width, height));
Basta criar um objeto LayoutParams e atribuí-lo ao seu imageView
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(150, 150);
imageView.setLayoutParams(params);
image_view.getLayoutParams().height
retorna o valor da altura em pixels. Você precisa obter as dimensões da tela primeiro para definir os valores corretamente.
Display display = context.getWindowManager().getDefaultDisplay();
DisplayMetrics outMetrics = new DisplayMetrics();
display.getMetrics(outMetrics);
int screen_height = outMetrics.heightPixels;
int screen_width = outMetrics.widthPixels;
Depois de obter as dimensões da tela, você pode definir a largura e a altura da visualização de imagem usando as margens adequadas.
view.getLayoutParams().height = screen_height - 140;
view.getLayoutParams().width = screen_width - 130 ;
Para definir o ImageView e Height programaticamente, você pode fazer
//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()
No cenário em que o tamanho do widget precisa ser definido programaticamente, verifique as regras abaixo.
LayoutParam
para o Layout no qual você está adicionando essa exibição . No meu caso, eu estou adicionando, TableRow
então eu tive que fazerTableRow.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);
Se você quiser apenas ajustar a imagem no modo de exibição de imagem, poderá usar o "quebra de conteúdo" na propriedade height e width com o tipo de escala, mas se desejar definir manualmente, precisará usar LayoutParams.
Os parâmetros de layout são eficientes para definir a altura e largura do layout programaticamente.
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);