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

Genişlik ve yüksekliği 100 dp veya 200 dp gibi dp birimlerine değiştirmek istiyorum. setLayoutParams sayı birimi almaz, seçimler sadece (wrap_content ve match_content). Android için yeniyim, bu yüzden nasıl değiştireceğimi karıştırdım.Birim için düzen paramları nasıl ayarlanır dp android

+1

'şamandıra piksel = TypedValue.applyDimension (TypedValue.COMPLEX_UNIT_DIP, dp, resources.getDisplayMetrics()); 'bu şekilde dp ile pikselleri –

cevap

1

Sanırım, dp'u doğrudan görünüme ayarlayamıyoruz. Yani, boyutu pixel'dan dp'a dönüştürmeliyiz.

dp'dan pixel almak için TypedValue#applyDimension() yöntemini kullanabilirsiniz.

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

Yani nihai kodu dimens.xml da boyut eklemek edilir

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

dönüştürebilirsiniz, örneğin genişliği 100 dp'ye ayarlayabilir miyim? – Ruby

+0

'şamandıra genişliği = TypedValue.applyDimension (TypedValue.COMPLEX_UNIT_DIP, 100, r.getDisplayMetrics()); 've (( genişliği, ViewGroup.LayoutParams.WRAP_CONTENT) yeni ViewGroup.LayoutParams)' uygulamak mChart.setLayoutParams;', var o ? – theapache64

+0

@AxeFox, Sen de doğru cevap ver ama biraz yanıltıcı düşünüyorum. {widthInPixel}, {withInDP} değerini değiştirmelidir çünkü DP'den piksellere dönüşür. Eğer Yanlışsam beni düzelt. –

6

başka yollar olacaktır. Örneğin, <dimen name="chart_width">100dp</dimen> numaralı adresi ekleyin.

Ardından, kodu:

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

Bu güzel bir çözüm :) – theapache64

-1

, bir senin düzen doğru inşa izin verir o piksel içine emin

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

dönüştürme daldırma değerleri için çalışacaktır deneyin kod satırı olacaktır ver çözmek:

int width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, YOUR_DESIRED_WIDTH, getResources().getDisplayMetrics()); 
İlgili konular