Установите согласованную тему для всех editTexts в Android

Я закончил делать свое приложение. Теперь я хочу, чтобы reset все мои 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 отдельно?

Ответ 1

Вы можете попробовать это. Вот часть файла манифеста, которую вам нужно изменить, чтобы вызвать вашу собственную тему (пользовательская тема, называемая здесь 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>

Вы можете добавить нужные параметры внутри стиля. Это применит стиль ко всем вашим текстовым изображениям.

Ответ 2

Одним из решений вашей проблемы является применение настраиваемой темы для всех ваших действий. Для этого вы можете наследовать свойства существующей темы и переопределить свойства, которые вы хотите изменить.

  • В AndroidManifest.xml найдите элемент .
  • Добавьте к нему атрибут:

Android: тема = "@стиль/"

  • Найдите файл styles.xml в папке значений.
  • Используйте следующий шаблон:
<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>

Чтобы процитировать официальный андроид:

Родительский атрибут в элементе является необязательным и указывает идентификатор ресурса другого стиля, из которого этот стиль должен наследоваться свойства. Затем вы можете переопределить свойства унаследованного стиля, если вы хотите.

Я пытался упростить понимание и следовать. Я младший разработчик, поэтому, когда вышеприведенное решение работает для меня, оно может быть не лучшим из них. Как я сказал, это решает проблему довольно эффективно.

Ответ 3

У меня была эта точная проблема. По какой-то причине это помогло мне отбросить часть android: в определении AppTheme и оставить ее только как editTextStyle (как упоминалось в этом ответе):

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

Ответ 4

К сожалению, невозможно установить атрибуты макета (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>

Ответ 5

Вам нужно будет установить свойство style="@styles/EditTextStyle" для всех ваших компонентов EditText в вашем приложении.

Ответ 6

определите атрибут стиля для всех EditText, как показано ниже:

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

Ответ 7

Вы должны указать layout_width индивидуально для каждого представления. Некуда бежать. Вы можете создать объект LayoutParams и установить в нем его ширину и высоту и установить в нем каждый EditText, например

textView1.setLayoutParams(lParams);
textView2.setLayoutParams(lParams);
...