我希望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>
答案 0 :(得分:48)
简答:如果您在自定义样式中指定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或其子类之一(例如MarginLayoutParams)。视图使用LayoutParams
告诉他们的父母ViewGroup他们想要如何布局。每个ViewGroup
类都实现了一个扩展ViewGroup.LayoutParams
的嵌套类。因此,LayoutParams
特定于ViewGroup
的类型。这意味着虽然TableLayout
和LinearLayout
可能都layout_margin
作为LayoutParams
之一,但它们被认为是完全不同的属性。
所以layout_margin
不仅仅是可以在任何地方应用的一般属性。它必须在ViewGroup
的上下文中应用,并将其明确定义为有效参数。应用ViewGroup
时,视图必须识别其父级LayoutParams
的类型。
在样式中指定layout_margin(包括主题中的样式)并尝试将该主题应用于应用程序/活动将导致布局属性被删除,因为尚未指定ViewGroup父级,因此参数无效。但是,将样式应用于已使用EditText
定义的TableLayout
视图,因为父ViewGroup
(TableLayout
}已知。
<强>来源:强>
Layout Parameters上的Android文档。
Android框架工程师和StackOverflow用户this question对adamp的回答。
此外,StackOverflow用户this question给予inazaruk答案。
答案 1 :(得分:1)
您在Manifest中没有使用正确的主题名称。尝试将其更改为:
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/MyTheme" >
答案 2 :(得分:0)
如果它对其他人有用,我想在这里提出the answer by Oliv to another SO question。 我试图在所有按钮上添加边距,发现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,其中the answer by Oliv to another SO question用于将边距设置为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>