3

我已经完成了我的应用程序。现在,我想重置我所有的 editTexts 以将布局宽度作为填充父级而不是包装内容。

android:layout_width="fill_parent"

而目前我所有的editTexts都是

android:layout_width="wrap_content"

有什么方法可以在样式 xml 文件中执行此操作,而不是在每个布局中单独执行?我目前将此作为我的 styles.xml

<style name="AppTheme" parent="android:Theme.Light">  
    <item name="android:fontFamily">Verdana</item>
    <item name="android:editTextStyle">@style/EditTextStyle</item>
</style>

<style name="EditTextStyle" parent="@android:style/Widget.EditText">
    <item name="android:layout_width">fill_parent</item>
    <item name="android:textColor">#808080</item>
</style>

但我得到一个例外,说必须指定 layout_width 。这是我的例外:

07-15 11:13:34.872: E/AndroidRuntime(1195): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.passwordkeeper.ui/com.passwordkeeper.ui.ActivityLogin}: java.lang.RuntimeException: Binary XML file line #29: You must supply a layout_width attribute.

有什么简单的方法还是我必须单独更改所有editText中的属性?

4

7 回答 7

4

你可以试试这个。这是您需要更改以调用自定义主题的清单文件的一部分(此处调用的自定义主题是 AppTheme:

<application android:name="YourApplication"
android:theme="@style/AppTheme" >

然后在您的文件 styles.xml 中,创建并自定义此自定义主题:

<style name="AppTheme" parent="@android:style/Theme.Holo.Light">
 <item name="android:typeface">YourTypeFace</item>
</style>

您可以在样式中添加所需的参数。这会将样式应用于所有文本视图。

于 2013-07-15T06:42:20.117 回答
2

您的问题的一种解决方案是将自定义主题应用于您的所有活动。为此,您可以从现有主题继承属性并覆盖要更改的属性。

  1. 在 AndroidManifest.xml 中,找到 <application> 元素。
  2. 将属性添加到它:

android:theme="@style/"

  1. 在 values 文件夹中找到 styles.xml 文件。
  2. 使用以下模板:
<style name="ApplicationStyle" parent="android:Theme.Light">
    <item name="@android:editTextStyle">@style/customEditText</item>"
</style>

上面使用的名称只是示例,您可以使用自己的名称。至于父主题,这也取决于您。

剩下的就是 editTextStyle 的定义(或您为样式选择的任何名称)。您应该从 Widget.EditText 继承属性并覆盖要更改的属性,如下所示:

<style name="customEditText" parent="@android:style/Widget.EditText">
    <item name="android:textColor" >#ffffff</item>
</style>

引用官方的android指南:

元素中的 parent 属性是可选的,并指定该样式应继承属性的另一个样式的资源 ID。然后,您可以根据需要覆盖继承的样式属性。

我试图让它易于理解和遵循。我是一名初级开发人员,所以虽然上述解决方案对我有用,但它可能不是最好的。正如我所说,它相当有效地解决了问题。

于 2014-05-10T01:26:57.487 回答
2

不幸的是,无法从主题设置布局属性 (layout_*)(请参阅布局参数文档Android 框架工程师的回答)。您必须在每个元素上设置它们或在样式中设置布局属性,并让每个元素引用如下样式:

<Button style="@style/ButtonBig" android:text="my text" />

其中 ButtonBig 的定义如下:

<style name="ButtonBig" parent="android:Widget.Holo.Light.Button">
    <item name="android:textSize">20sp</item>
    <item name="android:layout_width">match_parent</item>
    <item name="android:layout_height">100dp</item>        
</style>
于 2014-10-09T14:27:23.487 回答
2

我遇到了这个确切的问题。出于某种原因,它帮助我删除了定义中的android:部分AppTheme,并将其保留为editTextStyle(如本答案中所述):

<style name="AppTheme" parent="android:Theme.Light"> 
    <item name="android:fontFamily">Verdana</item>
    <item name="editTextStyle">@style/EditTextStyle</item>
</style>
于 2016-07-15T12:27:52.340 回答
0

您必须将属性设置为style="@styles/EditTextStyle"应用程序中的所有 EditText 组件。

于 2013-07-15T06:03:44.450 回答
0

为所有 EditText 定义样式属性,如下所示:

   <EditText
    android:id="@+id/editText1"
    android:layout_height="wrap_content"
    style="@style/EditTextStyle">
于 2013-07-15T06:05:43.777 回答
0

您必须为layout_width每个视图单独指定。没有办法逃脱。您可以创建一个LayoutParams对象并在其中设置其宽度和高度,并在其中设置每个 EditText

textView1.setLayoutParams(lParams);
textView2.setLayoutParams(lParams);
...
于 2013-07-15T06:24:27.123 回答