Как установить ширину / высоту для любого виджета через Theme в Android - PullRequest
6 голосов
/ 07 сентября 2011

Мне нужно использовать одинаковые виджеты (кнопки, editext, textviews) с такими же свойствами, как ширина, высота, textColor, размер и т. Д. На нескольких экранах (xmls).Поэтому я создал стили для отдельных виджетов (один стиль для кнопки, другой для редактирования текста ...) и определил все эти стили в моей CustomTheme.

Моя проблема:

Если я определю макетwidth / height также в стилях и просто давая style = "@ style / myButtonStyle" для кнопки в xml, работает нормально, хотя я не упомянул width / height в xml (может быть, наследуется от Style).

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

мой файл темы -

 <style name="Theme.Blue" parent="android:Theme">
 <item name="android:buttonStyle">@style/button222</item>
<item name="android:textViewStyle">@style/text222</item>
<item name="android:editTextStyle">@style/edittext222</item>
</style>

и мой стиль button222

 <style name="button222" parent="@android:style/Widget.Button">
<item name="android:layout_width">@dimen/mWidth</item>
<item name="android:textColor">#F56266</item>
<item name="android:textSize">20sp</item>
</style>

, и я указал размер как

       <dimen name="mWidth">180dip</dimen>

, и я использовал это в layout.xml

                          <Button   android:layout_width="180dip"
                android:layout_height="wrap_content"
                android:text="This is large text."
                />

            <Button
                android:layout_height="wrap_content"
                android:text="This is regular text one"
                />

            <Button
                style="@style/button222"
                android:layout_height="wrap_content"
                android:text="This is regular text."
                />

и он дает исключение, говоря «укажите ширину макета», который я упомянул в стиле button222 и пытаясь использовать в моей теме.

Ответы [ 3 ]

10 голосов
/ 11 ноября 2011

Вы должны вставить значение измерения в стиле xml:

<dimen name="buttonHeight">40px</dimen>

Тогда вам просто нужно сослаться на значение измерения.Итак, в вашем файле макета вы напишите:

android:layout_height="@dimen/buttonHeight"
0 голосов
/ 17 марта 2017

Просто обратитесь к стилю через тему приложения, и эта ошибка исчезнет.Сделай так:

style="@style/Theme.blue"
0 голосов
/ 07 сентября 2011

Не уверен, что ваша цель: важно ли вам не упоминать layout_width и layout_height в файле layout.xml, или вы просто ищете какой-либо способ использования значений из темы безссылаясь на отдельный стиль?

В последнем случае решением будет

layout_width="?attr/myCustomWidth"

, где в вашей CustomTheme вы определили атрибут myCustomWidth.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...