0

TextView を拡張し、境界線のサポートを追加しました。境界線を描画しているときに、境界線のある側にパディングを配置して、テキストが移動するようにする必要があります。

境界線の幅をピクセル単位で設定し、それに応じて描画しますが、TF201 タブレットで TextView に Padding を設定すると、 setpadding のドキュメントに明示的に定義されていると記載されていても、何らかの理由でパディング幅がピクセル単位で 3 倍になりますピクセルで。

編集:

私が選択した回答は問題の原因ではありませんが、有効な回答です。私の質問に対する本当の答えは、実際にはthisからの複製です。問題は、setPadding が呼び出されるたびにパディングに値を追加したことです。また、スクロールするページで 3 回呼び出されます。

4

2 に答える 2

2

ピクセル密度の問題かもしれません。setpadding docsがパディングをピクセル単位で設定するように求めているのは本当ですがpx、それを設定していますspdp? Supporting Different Densitiesドキュメントを読むと、次のように引用されます。

Different screens have different pixel densities,so the same number of pixels may correspond to different physical sizes on different devices.

したがって、2 つのビュー間の間隔を指定するときは、px ではなく dp を使用します。

<Button android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/clickme"
    android:layout_marginTop="20dp" />

テキスト サイズを指定するときは、常に sp を使用します。

<TextView android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:textSize="20sp" />

また、あなたのコメントに基づいて:

drawRect ユニットは androidDraw Rectangle を発行します。これは、異なる android 画面サイズの質問でサイズを変更するのに役立つ場合があります。

于 2013-07-23T01:00:51.230 に答える
0

メソッドはピクセル値のみを受け入れる場合がありますが、残念ながら、画面密度を考慮する必要がなくなりません。代わりに、DP の観点から値を決定し、実行時にプログラムでピクセルに相当する値を計算する必要があります。幸いなことに、役立つ組み込みメソッドがいくつかあります。これは、次のコードで実行できます。

/// Converts 14 dip into its equivalent px

int dimensionInDp = 14;    

Resources r = getResources();
float dimensionInPixels = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dimensionInDp, r.getDisplayMetrics());

結果はですが、メソッドで使用するためfloatに簡単に にキャストできます。intsetPadding(...)

(参照:ピクセルを dp に変換する)

于 2013-07-23T01:19:02.193 に答える