web-dev-qa-db-ja.com

プログラム内でレイアウトとテキストサイズをDPに設定するにはどうすればよいですか?

基本的に私はこれをXMLの中に持っていますが、コードの中にそれを作り直さなければなりません。どうすればいいのですか?

<EditText 
        Android:layout_width="140dp"
        Android:layout_height="20dp"
        Android:background="@drawable/input_bg01"
        Android:textSize="10dp"
        Android:gravity="center"
        Android:text="111-222-333     FOOO" />

これを使用してテキストサイズを設定できますが、layout_widthとheightはどうですか?

edTxt.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 10);

ピクセルの代わりにDPユニットを使用するようにコードに指示する方法はありますか?または、DPをピクセルに変換する変換関数ですか?

36
RobGThai

解決済み ここ

エキス:

DisplayMetrics metrics = getContext().getResources().getDisplayMetrics();
float dp = 20f;
float fpixels = metrics.density * dp;
int pixels = (int) (fpixels + 0.5f);
48
sven

次を使用できます。

float pixels = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 10, getResources().getDisplayMetrics());

現在、pixelsの値は、デバイスの現在の画面密度で10dpと同等です。

TypedValue には、変換に役立つ他の同様のメソッドが含まれています。

84
Santosh

完全を期すために:質問に対する別の解決策(私が好む)が与えられます here

setTextSize(float)は、スケーリングされたピクセル値を期待します。したがって、setTextSize(10)を使用すると、目的の結果が得られます。ただし、getDimension()およびgetDimensionPixelSize()は、ピクセル単位でサイズを返します。

したがって、あなたの例では

setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimensionPixelSize(R.dimen.edTxt_text_size));

どこ <dimen name="edtxt_text_size">10dp</dimen>は、たとえばdimens.xmlファイルで設定されます。

12
Julian Horst