0

特定の画面に対して動的にボタンを作成しています。デバイス(Nexus 5)では非常に小さく見えますが、エミュレータでははっきりと見えます。

エミュレーターで:

ここに画像の説明を入力

デバイス内: ここに画像の説明を入力

コードでボタンを作成するために以下のコードを使用しています:

LayoutParams updt_btn_params = new LayoutParams();
update_data = new Button(this);
update_data.setText("Update");
update_data.setTextSize(9);
updt_btn_params.width=80;
updt_btn_params.height=45;
updt_btn_params.gravity=Gravity.CENTER_HORIZONTAL;
update_data.setOnClickListener(update_listnr);
update_data.setLayoutParams(updt_btn_params);

デバイスでボタンを明確に取得するには、他に何をしなければなりませんか。ティア

4

2 に答える 2

1

問題は、これらを使用していることです:

updt_btn_params.width=80;
updt_btn_params.height=45;

これにより、幅と高さをピクセル単位で設定しますが、これは決して行うべきではありません。デバイスによってピクセル密度が異なります。つまり、デバイスによってピクセルのサイズが異なります。Nexus 5 はピクセル密度が非常に高いため、ボタンが非常に小さくなります。



これを回避するには、次の 2 つの方法があります。

1. リソースの dimen.xml で値を定義します。

リソースには、dimen.xml を含む "values" フォルダーがあります。これで、次のようにボタンの寸法を定義できます。

<dimen name="width">80dp</dimen>
<dimen name="height">45dp</dimen>

次に、次の方法でそれらをコードに読み込むことができます。

updt_btn_params.width = getResources().getDimensionPixelSize(R.dimen.width);
updt_btn_params.height = getResources().getDimensionPixelSize(R.dimen.height);

2. XML を使用する

ただし、アクティビティのレイアウト全体を XML ファイルで定義できる場合。

そこで、次のように「dp」で幅と高さを定義できます。

layout_width="80dp"
layout_height="45dp"

すべてのデバイスでボタンがまったく同じように見えるようにするには、「px」ではなく「dp」を使用することが不可欠です。

于 2014-11-27T09:19:18.183 に答える
0
float ht_px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, ht, getResources().getDisplayMetrics());
float wt_px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, wt, getResources()
于 2014-11-27T09:28:02.103 に答える