3

最初に私はこのようなボタンを持っていました:

<Button
    android:id="@+id/prefButton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:text="Edit" />

textSizeを指定しなかったため、デバイスのフォント設定からデフォルトの側を取得します。ボタンの幅と高さも追加すると見栄えがします。

ここで問題となるのは、背景画像(実際には背景色ですが、正確なargb値を取得できなかったため、画像を使用)を追加したい場合です。

    android:background="@drawable/backgroundImage"

画像は約300x300ピクセルのサイズでした。したがって、今私はサイズ300x300のボタンを取得します(明らかに)。

したがって、HeightとWidthの値をハードコーディングする必要があります。そして、それらの値と一致するかどうかを確認します。そうでない場合は、TextSizeを再度ハードコーディングする必要があります。

ボタンを以前と同じに保ち、背景画像を追加する方法はありますか(大きくなる可能性があります)。

ありがとうございました

4

1 に答える 1

3

あなたの問題にアプローチするより良い方法は、画像を小さくして9パッチ画像として設定することです. 9 パッチ画像では、画像の伸縮部分を定義して、伸縮時に変形しないようにすることができます。ここでは、ninepatch 伸縮可能パーツの描画方法を確認できます。

ここからのninepatch画像の説明は次のとおりです。

Nine-patch NinePatchDrawable グラフィックは伸縮可能なビットマップ イメージであり、背景として配置した View のコンテンツに合わせて Android が自動的にサイズ変更します。NinePatch の使用例は、標準の Android ボタンで使用される背景です。ボタンは、さまざまな長さの文字列に対応するために伸縮する必要があります。NinePatch ドローアブルは、1 ピクセル幅の余分な境界線を含む標準の PNG 画像です。拡張子 .9.png を付けて、プロジェクトの res/drawable/ ディレクトリに保存する必要があります。

境界線は、画像の伸縮可能領域と静的領域を定義するために使用されます。境界線の左側と上部に 1 ピクセル幅の黒い線を 1 つ (または複数) 描画して、伸縮可能なセクションを示します (他の境界線のピクセルは完全に透明または白にする必要があります)。伸縮可能なセクションはいくつでも持つことができます。それらの相対的なサイズは同じままであるため、最大のセクションは常に最大のままです。

右と下の行に線を引くことで、画像のオプションの描画可能セクション (事実上、パディング線) を定義することもできます。View オブジェクトが背景として NinePatch を設定し、View のテキストを指定する場合、すべてのテキストが右と下の行 (含まれている場合) で指定された領域内にのみ収まるように引き伸ばされます。パディング行が含まれていない場合、Android は左と上の行を使用してこの描画可能領域を定義します。

異なる線の違いを明確にするために、左と上の線は、画像を引き伸ばすために複製できる画像のピクセルを定義します。下と右の線は、View の内容が含まれる画像内の相対的な領域を定義します。

ボタンを定義するために使用されるサンプル NinePatch ファイルを次に示します。

ボタンナインパッチ

この NinePatch は、左と上の線で 1 つの伸縮可能な領域を定義し、下と右の線で描画可能な領域を定義します。上の画像では、灰色の点線が、画像を引き伸ばすために複製される画像の領域を示しています。下の画像のピンク色の四角形は、ビューのコンテンツが許可されている領域を示しています。コンテンツがこの領域に収まらない場合は、画像が引き伸ばされて収まるようになります。

Draw 9-patch ツールは、WYSIWYG グラフィック エディターを使用して NinePatch 画像を作成する非常に便利な方法を提供します。伸縮可能領域に対して定義した領域が、ピクセル複製の結果として描画アーティファクトを生成するリスクがある場合にも、警告が発生します。

于 2012-09-21T11:13:19.547 に答える