Android imposta l'altezza e la larghezza della visualizzazione personalizzata a livello di codice


128

Ho creato una vista personalizzata denominata Graphview. Ecco la struttura per la classe GraphView.

public class GraphView extends View {

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

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

Ho aggiunto la vista in un tablerow usando addview(). Funziona benissimo. Ora voglio impostare altezza e larghezza per il GraphView. Come farlo?

Risposte:


140

Il modo più semplice è impostare le dimensioni in modo programmatico in questo modo:

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

Questo va bene se conosci la dimensione esatta della vista. Tuttavia, se desideri un approccio più flessibile, puoi sostituire il onMeasure()metodo per misurare la vista in modo più preciso in base allo spazio disponibile e ai vincoli di layout ( wrap_content,match_parent , o una dimensione fissa).

Puoi trovare un esempio su come eseguire l'override onMeasure()guardando i documenti Android e l' LabelViewesempio nella tua directory SDK.


16
Sarebbe utile sapere quali LayoutParams stai importando lì.
user3690202

1
Il LayoutParamsdovrebbe essere dal layout dove graphViewè collocato. Ad esempio, se nel file di layout XML graphViewè inserito all'interno RelativeLayout, è necessario utilizzarenew RelativeLayout.LayoutParams(width, height)
Vic

208

Puoi impostare altezza e larghezza in questo modo:

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

76
È necessario assicurarsi che la classe LayoutParam che si utilizza provenga dalla classe Layout padre corretta. Ad esempio, se GraphView è contenuto in un LinearLayout, è necessario utilizzare la classe LinearLayout.LayoutParams.
yincrash,

41
Anche questo funziona e ti assicura di utilizzare la classe LayoutParams corretta: semplicemente myGraphView.getLayoutParams().height = 100;.
Sulai,

21
Se lo fai this.getLayoutParams().height = 100, assicurati di seguirlo this.setLayoutParams(this.getLayoutParams()), altrimenti non farà nulla (utile).
Achal Dave,

4
Penso che sia strano che questa risposta ottenga più punti. Mentre è più facile è molto meno modulare; se desideri utilizzare la vista in un posto diverso, dovrai codificare anche questi valori di larghezza / altezza. Fai attenzione a usare questo.
Gardarh,

1
Grazie @yincrash per averlo sottolineato. Sembra strano che abbia bisogno di usare la classe della vista genitore (RelativeLayout nel mio caso) invece della classe genitore della mia vista personalizzata (SurfaceView nel mio caso) però
ericn,

75

puoi impostare l'altezza e la larghezza di una vista in un layout relativo come questo

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

2
non è necessario impostare nuovamente layoutparam. Si riflette automaticamente. Questo è il vantaggio dell'approccio orientato agli oggetti.
Dipendra,

8
@Dipendra setLayoutParams()è necessaria la chiamata perché richiama altri metodi come resolveLayoutParams()erequestLayout()
William

dare un'eccezione come in onCreate getLayoutParams () è un valore nullo. Quindi i parametri. l'altezza causa un'eccezione
Sibasish

È necessario fare riferimento alla vista per cui è necessario impostare l'altezza. Controlla se stai puntando alla stessa vista
Rakshi,

1
Ottenere l' layoutParamsinizializzazione di una vista sarà un NPE, per favore spiega a che punto esegui questo?
John Sardinha,

6

Su Kotlin puoi impostare la larghezza e l'altezza di qualsiasi vista direttamente usando le loro proprietà virtuali:

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

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

spin12è il tuo spinner e 200 , 120 è widthe heightper il tuo spinner.


3

Questa è una versione basata su Kotlin, supponendo che la vista padre sia un'istanza di LinearLayout.

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

Ciò consente di impostare la larghezza e l'altezza ( 100e 200) in una sola riga.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.