是否可以为不同的屏幕尺寸定义不同的样式

时间:2012-02-08 11:54:48

标签: java android

我有一个Android应用程序可以计算扑克赔率(Shufflebot如果您有兴趣)。它在屏幕上显示需要足够大才能点击的卡片。一张卡片由CardView类呈现,并在布局中声明如下:

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

相应的“CardView”样式在res / values / 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 个答案:

答案 0 :(得分:2)

我在找到别的东西时,几乎是在事后的想法中找到答案。我根据不同的屏幕大小隔离了具有不同样式的元素,即我在每个不同的布局中创建了一个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" />

如果这些卡片的ID不同于id,那么这显然是行不通的,但对我来说并非如此。这意味着同样少数布局可以提供不同的屏幕尺寸。

答案 1 :(得分:1)

Android开发指南中有一节专注于supporting multiple screens

它列出了一些选项:

  • 在清单中明确声明您的应用程序支持的屏幕尺寸
  • 为不同的屏幕尺寸提供不同的布局
  • 为不同的屏幕密度提供不同的位图可绘制