gpt4 book ai didi

Android - 自定义样式中指定的边距未生效

转载 作者:IT老高 更新时间:2023-10-28 22:02:05 30 4
gpt4 key购买 nike

我希望 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 的默认边距不是,它仍在填充父级。这是我的表格 View :

<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,则必须将此样式显式应用于您希望具有指定边距的每个单独 View (如下面的代码示例所示) .在主题中包含此样式并将其应用于您的应用程序或 Activity 将不起作用。

<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 被 View 用来告诉他们的父级 ViewGroup他们希望如何布置。每个 ViewGroup 类都实现了一个扩展 ViewGroup.LayoutParams 的嵌套类。因此,LayoutParams 特定于 ViewGroup 的类型。这意味着虽然 TableLayoutLinearLayout 可能都将 layout_margin 作为其 LayoutParams 之一,但它们被认为是完全不同的属性。

所以 layout_margin 不仅仅是可以在任何地方应用的通用属性。它必须在明确将其定义为有效参数的 ViewGroup 的上下文中应用。当应用 LayoutParams 时, View 必须知道其父 ViewGroup 的类型。

在样式中指定 layout_margin,包括主题中的样式,并尝试将该主题应用于应用程序/Activity 将导致布局属性被删除,因为尚未指定 ViewGroup 父级,因此参数无效.但是,将样式应用于使用 TableLayout 定义的 EditText View 是可行的,因为父 ViewGroup(TableLayout) 是已知的。

来源:

关于 Layout Parameters 的 Android 文档.

回答 this question由 Android 框架工程师和 StackOverflow 用户 adamp .

另外,回答 this question通过 StackOverflow 用户 inazaruk .

关于Android - 自定义样式中指定的边距未生效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13167529/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com