コード上で動的に高さを変更する必要が出てきたのですが、以下のように設定しても、デバイス毎に高さが変わってしまいます。
final ScrollView scrollView = (ScrollView) view.findViewById(R.id.scroll_view); RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT); lp.setMargins(0, 60, 0, 0); scrollView.setLayoutParams(lp);
そもそもこのsetMarginsで設定している、60のサイズはpxなのか、dpなのかどちらなのかを調べたところ、コード上で設定する値は、pxだという事が分かりました。stackoverflow.com
なので、このpxをdpに変換するメソッドを作成
//pxをdpに置換 private static int convertPxToDp(Context context, int px){ float d = context.getResources().getDisplayMetrics().density; return (int)((px / d) + 0.5); } //dpをpxに置換 public static int convertDpToPx(Context context, int dp){ float d = context.getResources().getDisplayMetrics().density; return (int)((dp * d) + 0.5); }
これを使用。
final ScrollView scrollView = (ScrollView) view.findViewById(R.id.scroll_view); RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT); lp.setMargins(0, convertDpToPx(60), 0, 0); scrollView.setLayoutParams(lp);
これで、端末毎の高さが変わる事はないかなと、、stackoverflow.com