EditTextのデフォルトのマージンを10 dpにしたいと思います。そのため、styles.xmlファイルで次のように設定しました。
<resources xmlns:Android="http://schemas.Android.com/apk/res/Android">
<style name="MyTheme" parent="Android:style/Theme.NoTitleBar">
<item name="Android:editTextStyle">@style/edit_text_default</item>
</style>
<style name="edit_text_default" parent="Android:style/Widget.EditText">
<item name="Android:layout_margin">10dp</item>
</style>
</resources>
次に、AndroidManifest.xmlで、アプリケーションのテーマを定義したテーマに設定します。
<application
Android:icon="@drawable/ic_launcher"
Android:label="@string/app_name"
Android:theme="@style/MyTheme" >
...
テーマの「タイトルバーなし」の側面が機能しています。ただし、EditTextのデフォルトのマージンはそうではなく、まだ親を埋めています。これが私のテーブルビューです:
<TableLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:background="#FFFFFF" >
<TableRow>
<EditText Android:hint="@string/last_name" />
</TableRow>
<TableRow>
<EditText Android:hint="@string/first_name" />
</TableRow>
</TableLayout>
簡単な回答:カスタムスタイルでlayout_marginを指定している場合、このスタイルは、指定したマージンを確保したい個々の各ビューに明示的に適用する必要があります(以下のコードサンプルに見られるように)。このスタイルをテーマに含めて、アプリケーションまたはアクティビティに適用することはできません。
<TableLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:background="#FFFFFF" >
<TableRow>
<EditText Android:hint="@string/last_name" style="@style/edit_text_default" />
</TableRow>
<TableRow>
<EditText Android:hint="@string/first_name" style="@style/edit_text_default" />
</TableRow>
</TableLayout>
説明:layout_
で始まる属性は LayoutParams またはそのサブクラスの1つ(例 MarginLayoutParams )。 LayoutParams
はビューが親に伝えるために使用されます ViewGroup ビューのレイアウト方法。すべてのViewGroup
クラスは、ViewGroup.LayoutParams
を拡張するネストされたクラスを実装します。したがって、LayoutParams
はViewGroup
のタイプに固有です。つまり、TableLayout
とLinearLayout
はどちらもlayout_margin
をLayoutParams
として持っている場合がありますが、これらは完全に異なる属性と見なされます。
したがって、layout_margin
は、どこにでも適用できる単なる一般的な属性ではありません。有効な引数として明確に定義するViewGroup
のコンテキスト内で適用する必要があります。ビューは、ViewGroup
が適用される場合、親のタイプLayoutParams
をawareにする必要があります。
テーマのスタイルを含むスタイルでlayout_marginを指定し、そのテーマをアプリケーション/アクティビティに適用しようとすると、レイアウト属性が削除されます。これは、ViewGroup親がまだ指定されていないため、引数が無効であるためです。ただし、親EditText
(TableLayout
)がわかっているため、ViewGroup
で定義されているTableLayout
ビューにスタイルを適用すると機能します。
出典:
レイアウトパラメータ に関するAndroidドキュメント。
マニフェストで正しいテーマ名を使用しないでください。次のように変更してみてください。
<application
Android:icon="@drawable/ic_launcher"
Android:label="@string/app_name"
Android:theme="@style/MyTheme" >
他の人に役立つ場合に備えて、私は Olivの回答を別のSO質問 にここに持ってきます。すべてのボタンにマージンを追加しようとしていて、見つかったlayout_marginは機能しません。
テーマ:
<style name="FooThemeStyle" parent="Base.Theme.AppCompat">
<item name="Android:buttonStyle">@style/FooButton</item>
<item name="buttonStyle">@style/FooButton</item>
</style>
ボタンのスタイル:
<style name="FooButton" parent="Widget.AppCompat.Button">
<item name="Android:background">@drawable/button_background</item>
</style>
次に、button_background.xmlを示します。ここでは、マージンを2 dpに設定するために 別のOlivによる回答SO質問 が使用されます::
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item
Android:bottom="2dp"
Android:left="2dp"
Android:right="2dp"
Android:top="2dp">
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
...
</selector>
</item>
</layer-list>