Android establece la altura y el ancho de la vista personalizada mediante programación


128

He creado una vista personalizada llamada Graphview. Aquí está la estructura para la clase GraphView.

public class GraphView extends View {

    public GraphView(Context context, float[] values, String title, String[] horlabels, String[] verlabels, boolean type) {
        super(context);
                ........
   }

   ..................
   .................
}

He agregado la vista en una tabla usando addview(). Esta funcionando bien Ahora quiero establecer la altura y el ancho de GraphView. ¿Como hacer eso?

Respuestas:


140

La manera fácil es establecer el tamaño mediante programación de esa manera:

graphView.setLayoutParams(new LayoutParams(width, height));

Esto está bien si conoce el tamaño exacto de la vista. Sin embargo, si desea un enfoque más flexible, puede anular el onMeasure()método para medir el punto de vista más precisamente en función de las limitaciones del espacio disponible y de la disposición ( wrap_content, match_parent, o un tamaño fijo).

Puede encontrar un ejemplo sobre cómo anular onMeasure()mirando los documentos de Android y la LabelViewmuestra en su directorio SDK.


16
Sería útil saber qué LayoutParams está importando allí.
user3690202

1
El LayoutParamsdebe ser del diseño donde graphViewse coloca el. Por ejemplo, si en el archivo de diseño XML graphViewse coloca dentro RelativeLayout, entonces debe usarnew RelativeLayout.LayoutParams(width, height)
Vic

208

Puede establecer la altura y el ancho de esta manera:

myGraphView.setLayoutParams(new LayoutParams(width, height));

76
Debes asegurarte de que la clase LayoutParam que utilices sea de la clase de diseño padre correcta. Por ejemplo, si su GraphView está contenido en un LinearLayout, debe usar la clase LinearLayout.LayoutParams.
yincrash

41
Esto también funciona y garantiza que uses la clase LayoutParams correcta: simplemente hazlo myGraphView.getLayoutParams().height = 100;.
sulai

21
Si lo hace this.getLayoutParams().height = 100, asegúrese de seguirlo this.setLayoutParams(this.getLayoutParams()), de lo contrario no hará nada (útil).
Achal Dave

44
Creo que es extraño que esta respuesta obtenga más puntos. Si bien es más fácil, es mucho menos modular; si desea utilizar su vista en un lugar diferente, también necesitará codificar esos valores de ancho / alto allí. Tenga cuidado al usar esto.
gardarh

1
Gracias @yincrash por señalar eso. Sin embargo
ericn

75

puede establecer el alto y el ancho de una vista en un diseño relativo como este

ViewGroup.LayoutParams params = view.getLayoutParams();
params.height = 130;
view.setLayoutParams(params);

2
no necesita configurar nuevamente el layoutparam. Se refleja automáticamente. Esta es la ventaja del enfoque orientado a objetos.
Dipendra

8
@Dipendra la llamada setLayoutParams()es obligatoria porque invoca otros métodos como resolveLayoutParams()yrequestLayout()
William

dar excepción como en onCreate getLayoutParams () es un valor nulo. Entonces, params.height causa excepción
Sibasish

Debe consultar la vista para la que debe establecer la altura. Compruebe si está apuntando a la misma vista
Rakshi

1
Obtener el layoutParamsinicio de una vista será un NPE, explique en qué punto ejecuta esto.
John Sardinha

6

En Kotlin puede establecer el ancho y el alto de cualquier vista directamente usando sus propiedades virtuales:

someView.layoutParams.width = 100
someView.layoutParams.height = 200

4
spin12.setLayoutParams(new LinearLayout.LayoutParams(200, 120));

spin12es tu ruleta y 200 , 120 es widthy heightpara tu spinner.


3

Esta es una versión basada en Kotlin, suponiendo que la vista principal es una instancia de LinearLayout.

someView.layoutParams = LinearLayout.LayoutParams(100, 200)

Esto permite establecer el ancho y la altura ( 100y 200) en una sola línea.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.