2016-02-12 7 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); 

Ich mag die Breite und Höhe zu dp-Einheiten wie 100 dp oder 200 dp ändern ,. Die setLayoutParams nimmt keine Zahleneinheiten, die Auswahlmöglichkeiten sind nur (wrap_content und match_content). Ich bin neu bei Android, ich bin verwirrt, wie man es ändert.So legen Sie Layout-Parameter zu Einheiten dp android

+1

'float px = TypedValue.applyDimension (TypedValue.COMPLEX_UNIT_DIP, dp, resources.getDisplayMetrics());' diese Art und Weise du kannst dp in pixel umwandeln –

Antwort

1

Ich denke, wir können dp nicht direkt auf die Ansicht setzen. Also müssen wir die Dimension von pixel zu dp konvertieren.

Um pixel von dp zu erhalten, können Sie TypedValue#applyDimension() Methode verwenden.

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

So ist der endgültige Code wird

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

wo kann ich die breite auf 100 dpi einstellen? – Ruby

+0

'float width = TypedValue.applyDimension (TypedValue.COMPLEX_UNIT_DIP, 100, r.getDisplayMetrics());' und 'gelten mChart.setLayoutParams (neu ViewGroup.LayoutParams ( Breite, ViewGroup.LayoutParams.WRAP_CONTENT));', bekam es? – theapache64

+0

@AxeFox, Sie antworten auch richtig, aber ich denke ein wenig irreführend. {widthInPixel} sollte {withInDP} ändern, da es von DP in Pixel konvertiert. Korrigiere mich, wenn ich falsch liege. –

6

Einen anderen Möglichkeiten, wird Sie Ihre Dimension in dimens.xml hinzuzufügen.

Zum Beispiel <dimen name="chart_width">100dp</dimen> hinzufügen.

Dann wird in Ihrem Code:

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

Das ist eine gute Lösung :) – theapache64

-1

Versuchen Sie es mal wird es sicher

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

Konvertieren dip Werte in Pixel funktionieren wird Ihr Layout richtig, diese Codezeile bauen lassen wird lösen sie:

int width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, YOUR_DESIRED_WIDTH, getResources().getDisplayMetrics()); 
Verwandte Themen