2016-02-12 14 views
5
mainLayout = (LinearLayout) findViewById(R.id.linearLayout); 
mChart = new HorizontalBarChart(this); 
mChart.setLayoutParams(new ViewGroup.LayoutParams(
       ViewGroup.LayoutParams.MATCH_PARENT, 
       ViewGroup.LayoutParams.WRAP_CONTENT)); 
mainLayout.addView(mChart); 

Mi piace modificare la larghezza e l'altezza in unità dp come 100 dp o 200 dp ,. il setLayoutParams non prende unità numeriche, le scelte sono solo (wrap_content e match_content) .. Sono nuovo ad Android quindi sono confuso come cambiarlo.Come impostare i parametri di layout alle unità dp android

+1

'galleggiante px = TypedValue.applyDimension (TypedValue.COMPLEX_UNIT_DIP, dp, resources.getDisplayMetrics()); in questo modo' puoi convertire dp in pixel –

risposta

1

Penso che non possiamo impostare dp direttamente alla vista. Quindi dobbiamo convertire la dimensione da pixel a dp.

Per ottenere pixel da dp, è possibile utilizzare il metodo TypedValue#applyDimension().

Resources r = getResources(); 
float px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, {sizeInDp}, r.getDisplayMetrics()); 

Quindi il codice finale sarà

float width = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, {widthInDp}, r.getDisplayMetrics()); 

float height = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, {heightInDp}, r.getDisplayMetrics()); 

mChart.setLayoutParams(new ViewGroup.LayoutParams(
       width, 
       height)); 
+0

dove posso impostare la larghezza a 100 dp per esempio? – Ruby

+0

'width = float TypedValue.applyDimension (TypedValue.COMPLEX_UNIT_DIP, 100, r.getDisplayMetrics());' 'e applicare mChart.setLayoutParams (nuove ViewGroup.LayoutParams ( larghezza, ViewGroup.LayoutParams.WRAP_CONTENT));', ha ottenuto vero? – theapache64

+0

@AxeFox, la risposta è corretta, ma penso che sia un po 'fuorviante. {widthInPixel} dovrebbe cambiare {withInDP} perché converte da DP a pixel. Correggimi se sbaglio –

6

Un altro modo è che si aggiungono vostra dimensione in dimens.xml.

Ad esempio, aggiungere <dimen name="chart_width">100dp</dimen>.

Poi, al vostro codice:

float width = getResources().getDimension(R.dimen.chart_width); 
mChart.setLayoutParams(new ViewGroup.LayoutParams(
      width, 
      ViewGroup.LayoutParams.WRAP_CONTENT)); 
+0

Questa è una buona soluzione :) – theapache64

-1

Dare una prova che funzionerà di sicuro

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
       200, 200); 
     params.setMargins(5, 0, 5, 0); 

     mChart= new HorizontalBarChart(getApplicationContext()); 
     mChart.setLayoutParams(params); 

     mainLayout.addView(mChart); 
3

Conversione di valori dip in pixel permette il layout a costruire in modo corretto, questa riga di codice sarà risolverlo:

int width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, YOUR_DESIRED_WIDTH, getResources().getDisplayMetrics()); 
Problemi correlati