主题的可绘制问题

时间:2013-12-31 23:09:35

标签: android android-theme android-drawable

在构建我的应用程序时,我开始使用Theme.Light.NoTitleBar.Fullscreen主题。我为这样的整个应用程序构建了所有布局,并让我看到了我想要的东西。布局中使用的一些drawable具有特定的大小设置,而其他一些则设置为wrap_content。

然后我决定切换到Holo灯光主题。当我这样做时,设置为wrap_content的布局中使用的所有drawable最终都会变大。几乎就像他们从一个更大的水桶中拉出来一样。事实上,有些人看起来已经被拉长了。

Holo Based Theme

Default PreHolo Theme

我知道旧主题中的背景是黑色的,但这不是问题(这实际上是包含在另一个布局中的布局文件)。显然两者之间的规模差异很大。

4 个答案:

答案 0 :(得分:1)

根据我在这个帖子中读到的内容,这是我的猜测。

这可能是因为您将这些图像用作Button视图的背景属性。这是不安全的,因为根据默认边距值 - 在主题中定义 - Buttons可以根据需要拉伸背景图像。如果是这种情况,则需要使用ImageButton视图,并使用setImage*()方法分配图像。在那里你可以使用Carlos Robeles提到的scaleType属性。

答案 1 :(得分:0)

我唯一想到的是,不同的主题对于图像视图的默认android:scaleType属性具有不同的值。

请尝试将属性指定为对您有用的属性,并查看使用2个不同主题会发生什么。例如,您可以使用android:scaleType="center",因此您的ImageView将类似于

   <ImageView 
          android:scaleType="center"
          android:width="wrap_content"
          android:height="wrap_content"
          android:src="...

Yo可以看看ImageView参考中的不同比例类型: http://developer.android.com/reference/android/widget/ImageView.html#attr_android:scaleType

要理解每种类型的含义并不容易,所以最好是花点时间与它们一起玩

答案 2 :(得分:0)

我的猜测是,出于某种原因,Holo主题渲染图像的分辨率低于Light。我的意思是,例如你在drawable-xhdpi中有你的drawable,Holo将它们视为drawable-hdpi。事实上,我没有任何证据证明这一点,但最近我一直在搞乱决议,而且差异对我来说似乎很熟悉。

如果您的drawable-xxhdpi(最大分辨率)文件夹中没有您的绘图,您可以尝试将它们放入更高的杠杆分辨率文件夹中,看看会发生什么。

答案 3 :(得分:0)

从Android的源代码,请参阅https://github.com/android/platform_frameworks_base/blob/master/core/res/res/values/styles.xml
您的按钮将在Holo.Light中使用的样式是

<style name="Widget.Holo.Light.Button" parent="Widget.Button">
    <item name="android:background">@android:drawable/btn_default_holo_light</item>
    <item name="android:textAppearance">?android:attr/textAppearanceMediumInverse</item>
    <item name="android:textColor">@android:color/primary_text_holo_light</item>
    <item name="android:minHeight">48dip</item>
    <item name="android:minWidth">64dip</item>
</style>

见最后两行。它有默认minHeightminWeight。这就是你的按钮伸展的原因。

解决方案
1.将minHeight的{​​{1}}和minWidth设为0 2.使用这样的自定义样式。

Button

3。使用<style name="MyHoloLightButtonStyle"> <item name="android:background">@android:drawable/btn_default_holo_light</item> <item name="android:textAppearance">?android:attr/textAppearanceMediumInverse</item> <item name="android:textColor">@android:color/primary_text_holo_light</item> </style> ,然后按ImageButton(非setImage*)方法设置图片。