Установите согласованную тему для всех 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);
...