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

Chciałbym zmienić szerokość i wysokość na dp jednostek takich jak 100 dp lub 200 dp ,. setLayoutParams nie przyjmuje jednostek liczbowych, dostępne są tylko opcje (wrap_content i match_content). Jestem nowy na Androida, więc jestem zdezorientowany, jak to zmienić.Jak ustawić parametry układu dla jednostek dp android

+1

'pływak px = TypedValue.applyDimension (TypedValue.COMPLEX_UNIT_DIP, DP, resources.getDisplayMetrics());' w ten sposób możesz przekonwertować dp na piksele –

Odpowiedz

1

Myślę, że nie możemy ustawić dp bezpośrednio do widoku. Musimy więc przekonwertować wymiar z pixel na dp. Aby uzyskać pixel z dp, można użyć metody .

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

Więc ostateczny kod będzie

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

gdzie mogę ustawić szerokość np. na 100 dp? – Ruby

+0

'width = TypedValue.applyDimension pływak (TypedValue.COMPLEX_UNIT_DIP, 100, r.getDisplayMetrics());' 'mChart.setLayoutParams i zastosowanie (nowe ViewGroup.LayoutParams ( szerokość ViewGroup.LayoutParams.WRAP_CONTENT));', dostał to ? – theapache64

+0

@AxeFox, odpowiadasz również poprawnie, ale wydaje mi się, że wprowadzam w błąd. {widthInPixel} powinien zmienić {withInDP}, ponieważ konwertuje z DP na piksele. Popraw mnie, jeśli się mylę. –

6

Another sposobów jest ty dodaj swój wymiar w dimens.xml. Na przykład dodaj <dimen name="chart_width">100dp</dimen>.

Następnie w kodzie:

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

To dobre rozwiązanie :) – theapache64

-1

Spróbować będzie działać na pewno

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

przeliczania wartości zanurzyć pikseli pozwoli Twój układ zbudować poprawnie tej linii kodu będzie go rozwiązać:

int width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, YOUR_DESIRED_WIDTH, getResources().getDisplayMetrics()); 
Powiązane problemy