web-dev-qa-db-fra.com

Android: définissez ImageView layout_height par programme

J'ai une ImageView dans mon fichier main.xml:

<ImageView
            Android:id="@+id/pageImage"
            Android:layout_width="270dp"
            Android:layout_height="45dp"
            Android:layout_alignParentLeft="true"
            Android:layout_alignParentTop="true"
            Android:layout_marginLeft="25dp"
            Android:layout_marginTop="15dp"
            Android:scaleType="fitXY"
            Android:src="@drawable/pageimage" />

Ce que je dois seulement faire, c'est régler le layout_height par programmation vers une autre valeur.

De plus, je dois définir la valeur dans dp. Il est donc actuellement 45dp, je voudrais le changer en une autre valeur dans mon activité principale.

J'ai essayé de comprendre comment faire cela en utilisant LayoutParams, mais je n'ai pas réussi.

Merci.

21
capcom

Je pense que vous voulez quelque chose comme ça:

ImageView imgView = (ImageView) findViewById(R.id.pageImage);
imgView.getLayoutParams().height = 200;

Donc, nous obtenons d'abord l'ImageView du XML. Ensuite, getLayoutParams () vous donne exactement les paramètres que vous pouvez alors modifier. Vous pouvez les définir directement là-bas. La même chose pour la largeur, etc.

A propos de l'unité (sp, dp ...) j'ai trouvé quelque chose ici. J'espère que cela t'aides:

tilisez DIP, SP métriques par programme

Là, ils mentionnent que toutes les unités sont des pixels. Dans l'exemple, il définit la largeur minimale de 20sp comme ceci:

TextView tv0 = new TextView(this);
int px = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 20, getResources().getDisplayMetrics());
tv0.setMinimumWidth(px);

P.S. Voici le code complet que j'utilise. J'espère que c'est ce que vous voulez:

package com.example.testproject2;

import Android.os.Bundle;
import Android.app.Activity;
import Android.view.Menu;
import Android.widget.ImageView;

public class MainActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ImageView imgView = (ImageView) findViewById(R.id.pageImage);
        imgView.getLayoutParams().height = 500;
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
}
57
Tobias Reich

Vous pouvez faire quelque chose comme ça:

LinearLayout.LayoutParams layoutParams  = new LinearLayout.LayoutParams(width_physical_pixels, height_physical_pixels);
imageView.setLayoutParams(layoutParams);

Mais dans les paramètres, il faut un pixel, vous devez donc utiliser la formule pour convertir les pixels en dp, par exemple, vous pouvez utiliser ceci pour convertir:

float scale = getBaseContext().getResources().getDisplayMetrics().density;    
px = dp_that_you_want * (scale / 160);

Tout assembler:

//Get screen density to use in the formula.
float scale = getBaseContext().getResources().getDisplayMetrics().density;    
px = dp_that_you_want * (scale / 160);

LinearLayout.LayoutParams layoutParams  = new LinearLayout.LayoutParams(px, px);
imageView.setLayoutParams(layoutParams);

Je ne sais pas si c'est ce que vous cherchez, ou si cela fonctionnera, alors faites-moi savoir si c'est le cas.

12
0gravity