28

EditTextのデフォルトのマージンを10dpにしたいのですが。したがって、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>
4

3 に答える 3

57

簡単な回答:カスタムスタイルで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です。これが意味するのは、aTableLayoutとaのLinearLayout両方がlayout_marginその1つとして持つ可能性がある一方でLayoutParams、それらは完全に異なる属性であると見なされるということです。

したがってlayout_margin、どこにでも適用できる一般的な属性だけではありません。ViewGroup有効な引数として具体的に定義するaのコンテキスト内で適用する必要があります。ビューは、適用されるときにその親のタイプを認識している必要があります。ViewGroupLayoutParams

テーマにそのスタイルを含め、スタイルにlayout_marginを指定し、そのテーマをアプリケーション/アクティビティに適用しようとすると、ViewGroupの親がまだ指定されておらず、引数が無効であるため、レイアウト属性が削除されます。ただし、親()がわかっているため、作品でEditText定義されたビューにスタイルを適用します。TableLayoutViewGroupTableLayout

出典:

レイアウトパラメータに関するAndroidのドキュメント。

AndroidフレームワークエンジニアとStackOverflowユーザーadampによってこの質問に答えられました。

また、 StackOverflowユーザーinazarukによってこの質問に答えられます。

于 2012-11-13T17:07:11.793 に答える
1

マニフェストで正しいテーマ名を使用していません。次のように変更してみてください。

<application
     android:icon="@drawable/ic_launcher"
     android:label="@string/app_name"
     android:theme="@style/MyTheme" >
于 2012-10-31T21:19:30.993 に答える
0

他の人に役立つ場合に備えて、ここで別のSOの質問にOlivの回答を持ってきたいと思います。すべてのボタンにマージンを追加しようとしましたが、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で、Olivによる別のSO質問への回答を使用して、マージンを2dpに設定します。

<?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>
于 2018-02-27T17:19:55.650 に答える