4

TextView や Button などのさまざまなコントロールを垂直方向に配置する必要があるレイアウトを (Eclipse を使用して) 作成しようとしています。すべてのウィジェットを完全に左揃えにしようとしています。コントロールに同じ左マージン/パディングを指定しても、異なるタイプのコントロール間で 1 ~ 2 ピクセルの違いが見られます。

問題は、ウィジェットの境界線 (Eclipse の青い四角形) とウィジェットのコンテンツ/グラフィックスの間の距離が、ウィジェット (TextView と Button など) によって異なることです。

TextView の左パディングを指定するか、ボタン コンテナーの左マージンを減らすことで、回避策を適用できます。しかし、私はよりクリーンなソリューションを探しています。ウィジェットの境界線とコンテンツの違いを制御する属性が見つかりません。このギャップをどのように制御できるかについての指針はありますか?

問題を示すスナップショットを以下に示します。この問題に使用しているレイアウト XML は次のとおりです。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World" />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Dummy Button" />

</LinearLayout>

以下の画像は、ダミー アプリケーションのスナップショットを示しています。"Hello World" TextView と "Dummy Button" の左マージンの違いに注意してください。

2 番目の写真は、Eclipse で選択したときのボタン ウィジェットを示しています。青い四角形は、ウィジェットの境界/境界を示します。ボタンの境界線 (青い四角形) とコンテンツ (灰色の四角形) の違いは、いくつかのプロパティで制御できますか?

ダミー アプリケーションのスナップショット 境界のあるボタン

4

1 に答える 1

2

これは、TextView や他の Android ウィジェットが独自の固有のスタイルを持っている可能性がある (Android のバージョンにも依存する) 難しい問題です。

したがって、これを回避するには、独自のスタイルを作成する必要があります。

独自のスタイルを作成する際は、常にこの主題に関する Android ソース コードを参照してください。

https://github.com/android/platform_frameworks_base/tree/master/core/res/res/values

https://github.com/android/platform_frameworks_base/blob/master/core/res/res/values/themes.xml

https://github.com/android/platform_frameworks_base/blob/master/core/res/res/values/styles.xml

独自のスタイルを作成するには、複数の方法があります。

1 つの方法は、マニフェストでアクティビティにテーマを設定することです。まず、/values/ フォルダーに styles.xml ファイルが必要です。ここで、新しいスタイルを宣言します。

<style name="Theme.MyTheme.Dark" parent="@android:style/Theme.NoTitleBar">
    <item name="android:textViewStyle">@style/Widget.TextView.Black</item>
</style>

<style name="Theme.MyTheme.Light" parent="@android:style/Theme.NoTitleBar">
    <item name="android:textViewStyle">@style/Widget.TextView.White</item>
</style>

その上のスタイルは、タイトル バーを非表示にする Android スタイルを継承していますが、別のものから継承することもできます。このテーマでは、textViewStyle をオーバーライドします。これにより、 のカスタム値を設定しTextView、固有の値の一部をオーバーライドできます。

<style name="Widget.TextView.White" parent="@android:style/Widget.TextView">
    <item name="android:textColor">#FFFFFF</item>
</style>

<style name="Widget.TextView.Black" parent="@android:style/Widget.TextView">
    <item name="android:textColor">#000000</item>
</style>

最後に、AndroidManifest.xml でアクティビティのテーマを設定します。

     <activity
        android:name=".ui.phone.FirstActivity"
        android:theme="@style/Theme.MyTheme.Dark" />

     <activity
        android:name=".ui.phone.SecondActivity"
        android:theme="@style/Theme.MyTheme.Light" />

FirstActivity で TextView を使用すると、テキストはデフォルトで黒になり、2 番目のアクティビティでは白になります。

特定の質問について:

上部にリンクしたソース コード ファイルを調べて、ウィジェットとレイアウトに影響を与えるパディング、minWidth、またはサイズ属性があるかどうかを確認する必要があります。

于 2012-05-29T12:17:39.883 に答える