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); 

幅と高さを100 dpや200 dpなどのdp単位に変更するのが好きです。 setLayoutParamsは数字の単位を取らず、選択肢は(wrap_contentとmatch_content)のみです。私はAndroidには新しいので、どのように変更するのが混乱しています。レイアウトパラメータを単位に設定する方法

+1

'フロートPX = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP、DP、resources.getDisplayMetricsを());'このようdpをピクセル –

答えて

1

dpを直接ビューに設定することはできません。そこで、サイズをpixelからdpに変更しました。

pixeldpから取得するには、TypedValue#applyDimension()メソッドを使用できます。

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

だから、最終的なコードは、あなたがdimens.xmlにディメンションを追加している

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

に変換することができます。ここで、幅は100 dpに設定できますか? – Ruby

+0

'mChart.setLayoutParams(new ViewGroup.LayoutParams( width、 ViewGroup.LayoutParams.WRAP_CONTENT))'、 'float width = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP、100、r.getDisplayMetrics());それ ? – theapache64

+0

@AxeFox、あなたも正しい答えが、私は少し誤解を招くと思います。 {widthInPixel}はDPからピクセルに変換されるため、{withInDP}を変更する必要があります。私が間違っているなら、私を訂正してください。 –

6

別の方法になります。

たとえば、<dimen name="chart_width">100dp</dimen>を追加します。

次に、あなたのコードで:

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

これは良い解決策です:) – theapache64

-1

は、それはあなたのレイアウトが正しく構築できます、それはピクセルに必ず

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

変換ディップ値のために動作しますしてみてください、このコード行をします与えますそれを解決する:

int width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, YOUR_DESIRED_WIDTH, getResources().getDisplayMetrics()); 
関連する問題