2012-02-08 4 views
2

У меня есть приложение для Android, которое вычисляет коэффициенты покера (Shufflebot, если вам интересно). Он отображает карты на экране, которые должны быть достаточно большими, чтобы задействовать. Карта оказывается классом CardView и объявлены в макете следующим образом:Можно ли определить разные стили для разных размеров экрана?

<com.shufflebot.view.CardView style="@style/CardView" 
    android:id="@+id/flop1"></com.shufflebot.view.CardView> 

Соответствующий стиль «CardView» объявлен в RES/значениях/styles.xml.

<style name="CardView"> 
    <item name="android:layout_width">40dp</item> 
    <item name="android:layout_height">56dp</item> 
    <item name="android:layout_marginRight">1dp</item> 
</style> 

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

Можно ли определить альтернативные styles.xml для этого? например могу ли я определить res/values-xlarge/styles.xml (для Android 3.2) и res/values-sw800dp/styles.xml, где я могу определить альтернативную версию моего стиля? Еще лучше, может ли этот файл содержать только один модифицированный стиль, в то время как Android переходит к исходным styles.xml для других значений?

Когда я пытаюсь сделать это в Eclipse, я вижу красные подчеркивания, предлагая мне, что это не поддерживается.

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

Итак, каков наилучший способ масштабирования одного, но не всех таких элементов?

ответ

2

Я нашел ответ почти как запоздалую мысль, глядя на что-то еще. Я выделил элемент, который имеет другой стиль в соответствии с различным screensizes, т.е. создать card.xml в каждом другом макете, что оно применяется к:

<?xml version="1.0" encoding="utf-8"?> 
<com.shufflebot.view.CardView xmlns:android="http://schemas.android.com/apk/res/android" 
    style="@style/CardViewLarge" > 
</com.shufflebot.view.CardView> 

и

<?xml version="1.0" encoding="utf-8"?> 
<com.shufflebot.view.CardView xmlns:android="http://schemas.android.com/apk/res/android" 
    style="@style/CardView" > 
</com.shufflebot.view.CardView> 

Тогда я заменяющие экземплярам в моих макетах с заявлениями:

<include android:id="@+id/river" layout="@layout/card" /> 

Это, очевидно, не будет работать, если карты были другие, чем ид, которые были разные, но это не так для меня атрибутов. И это означает, что одна и та же часть макетов может обслуживать разные размеры экрана.

1

В Android Dev Guide есть раздел, который фокусируется на supporting multiple screens.

Это список некоторых вариантов, как:

  • Явное объявить в манифесте экран размеры которого ваше приложение поддерживает
  • Обеспечить различные макеты для различных размеров экрана
  • Предоставление различных вводимого коэффициента битовой карты для различных плотностей экрана
+0

Я знаю, что могу использовать разные макеты, но я бы предпочел использовать другой стиль с тем же макетом. Помимо размера одного конкретного вида, макет идентичен.Необходимость вырезать, вставлять и поддерживать несколько идентичных макетов просто не подходит для чего-то, что должно быть в стиле стиля. – locka

+0

@locka: «Создайте новый каталог в каталоге res/directory и назовите его с помощью формата: - . - это стандартное имя ресурса (например, drawable или layout)." Я полагаю, что это означает, что документация просто использует «layout» и «drawable» в качестве примера, а также работает с «значениями». – unholysampler

+0

Хотелось бы, чтобы это произошло, но пока мои эксперименты не появляются. – locka

Смежные вопросы