我已经完成了我的应用程序。现在,我想重置所有的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中的属性吗?
答案 0 :(得分: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>
您可以在样式中添加所需的参数。这会将样式应用于所有文本视图。
答案 1 :(得分:2)
您的问题的一个解决方案是将自定义主题应用于您的所有活动。为此,您可以从现有主题继承属性并覆盖要更改的属性。
机器人:主题=&#34; @style /&#34;
<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>
To quote the official android guide:
元素中的parent属性是可选的并指定 此样式应从其继承的另一种样式的资源ID 属性。然后,您可以覆盖继承的样式属性if 你想要。
我试图让它易于理解和遵循。我是一名初级开发人员,所以当上述解决方案适合我时,它可能不是那里最好的解决方案。正如我所说,它可以相当有效地解决问题。
答案 2 :(得分:2)
我遇到了这个问题。出于某种原因,它帮助我将android:
部分放在AppTheme
定义中,并将其仅保留为editTextStyle
(如this answer中所述):
<style name="AppTheme" parent="android:Theme.Light">
<item name="android:fontFamily">Verdana</item>
<item name="editTextStyle">@style/EditTextStyle</item>
</style>
答案 3 :(得分:1)
不幸的是,无法从主题设置布局属性(layout_ *)(请参阅Layout Parameters documentation和this answer from an Android framework engineer)。您必须在每个元素上设置它们或在样式中设置布局属性,并让每个元素引用这样的样式:
<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>
答案 4 :(得分:0)
您必须将属性style="@styles/EditTextStyle"
设置为应用程序中的所有EditText组件。
答案 5 :(得分:0)
为所有EditText定义样式属性,如下所示:
<EditText
android:id="@+id/editText1"
android:layout_height="wrap_content"
style="@style/EditTextStyle">
答案 6 :(得分:0)
您必须分别为每个视图指定layout_width
。没有办法逃脱。您可以创建一个LayoutParams
对象并在其中设置其宽度和高度,并在每个EditText中设置它,如
textView1.setLayoutParams(lParams);
textView2.setLayoutParams(lParams);
...