Tengo un ImageView en mi main.xml archivo:

<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" />

Lo que sólo necesitas hacer es configurar el layout_height mediante programación a otro valor.

Además, necesito para establecer el valor en dp. Así es en la actualidad 45dp, me gustaría cambiar a otro valor en mi actividad principal.

Traté de averiguar cómo hacer esto utilizando LayoutParams, pero yo no podía tener éxito.

Gracias.

InformationsquelleAutor capcom | 2012-08-11

2 Comentarios

  1. 57

    Creo que quiere algo como esto:

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

    Así que primero tenemos el ImageView desde el XML. Luego getLayoutParams() obtiene exactamente los parámetros que usted puede editar luego. Usted puede establecer directamente allí. Lo mismo para la anchura etc.

    Acerca de la unidad (sp,dp…) he encontrado algo aquí. Espero que esta ayuda:

    El uso de DIP, SP métricas mediante programación

    Hay que mencionar, que todas las unidades de píxeles. En el ejemplo que él pone la ancho mínimo de 20sp como este:

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

    P. S. Aquí está el código completo que yo uso. Espero que esto sea lo que usted desea:

    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;
        }
    }
    • Creo que getLayoutParms() no puede ser usado para establecer el valor, sólo de recuperar, a la derecha?
    • No, en absoluto. Yo sólo lo intentó. Funciona perfectamente bien! 🙂
    • Espere, usted es capaz de establecer un valor de uso de su método? Yo soy incapaz. Se requiere un punto y coma después de la height.
    • Sí, funciona. He publicado mi código en la respuesta. Esperemos que esto es lo que quería hacer. Hay una excepción o algo como eso para usted? He compilado para Android 2.3 tal vez ha cambiado algo? ¿El uso de Android 4.x?
    • La BELLEZA! Funciona! Cómo genial, muchas gracias. Le debo mucho a mi amigo 🙂
    • Nada que agradecerme. Me alegro de ayudar! 🙂
    • Una cosa, la altura se establece en px en tu ejemplo, ¿cierto? No dp? Supongo que sólo puedo convertir de dp a px, aunque.
    • Así, el valor que están siempre pixsels. Pero se puede calcular de ellos (como en el ejemplo con sp). No tengo un dp convertidor de alrededor, pero estoy seguro de que usted puede encontrar uno. Lo siento.
    • Lo que acerca de esto: stackoverflow.com/questions/4605527/…
    • No te preocupes, lo tengo. Gracias de nuevo!

  2. 12

    Puede hacer algo como esto:

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

    Pero en los parámetros que tarda un píxel, por lo que tendría que utilizar la fórmula para convertir los píxeles a la dp, por ejemplo, puede utilizar esta opción para convertir:

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

    Poniendo todo junto:

    //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);

    No sé si esto es lo que usted está buscando, o si se va a trabajar, así que déjame saber si lo hace.

    • Esto funciona muy bien! Muchas gracias. La respuesta a continuación llegó el primer lugar y es un poco más simple. Por favor, perdóname por no elegir tu respuesta como la mejor.
    • No hay problema, al menos funciona.

Dejar respuesta

Please enter your comment!
Please enter your name here