2013-07-15 24 views
3

我完成了我的应用程序。现在,我想重置所有的editTexts,使布局宽度为填充父项而不是包装内容。为Android中的所有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

你检查,如果你已经设置AppTheme在清单文件的主题? –

+0

是啊Naresh ...主题设置正确。 –

+0

只需从样式中移除'layout_width'并尝试。我们无法以样式设置此属性。尝试重新运行并检查它是否有效! –

回答

0

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

+0

有很多EditText组件...单独设置属性是我想要避免的。没有其他方式莫滕? –

0

定义所有的EditText style属性象下面这样:

<EditText 
    android:id="@+id/editText1" 
    android:layout_height="wrap_content" 
    style="@style/EditTextStyle"> 
+1

我能做到这一点,但后来我不得不这样做单独为每个EDITTEXT在我的应用程序......必须有像50!没有更简单的方法吗? –

0

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

textView1.setLayoutParams(lParams); 
textView2.setLayoutParams(lParams); 
... 
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> 

您可以添加你需要的风格里面的参数,这将样式应用到所有的textviews。

2

一个解决问题的方法是将自定义主题应用到所有的活动中,为了要做到这一点,你可以继承它来自现有主题的属性并覆盖要更改的属性。

  1. 在AndroidManifest.xml,找到<应用>元件。
  2. 属性添加到它:

机器人:主题= “@风格/”

  1. 找到在价值文件夹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> 

To quote the official android guide:

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

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

1

不幸的是,无法从主题设置布局属性(layout_ *)(请参见Layout Parameters documentationthis 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> 
2

我在这确切的问题。出于某种原因,它帮助我在AppTheme定义砸android:一部分,把它仅仅作为editTextStyle(如this answer提到):

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