与主题可绘制的问题

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

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

基于Holo的主题

默认PreHolo主题

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

Solutions Collecting From Web of "与主题可绘制的问题"

这里只是基于我在这个线程中读到的内容。

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

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

请尝试将属性指定为适合您的属性,然后查看使用这两个不同的主题会发生什么情况。 例如,你可以使用android:scaleType="center" ,所以你的ImageViews会是这样的

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

哟可以看看在ImageView的参考不同的比例types: http : //developer.android.com/reference/android/widget/ImageView.html#attr_android : scaleType

要了解每种types的含义并不容易,所以最好花一点时间和他们一起玩

我的猜测是,由于某种原因,Holo主题使得图像的分辨率低于Light。 我的意思是说,例如,你在drawable-xhdpi有你的drawable,而Holo把它们当作drawable-hdpi 。 事实上,我没有这方面的证据,但最近我一直在搞解决scheme,差别似乎对我很熟悉。

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

从android的源代码,请参阅https://github.com/android/platform_frameworks_base/blob/master/core/res/res/values/styles.xml
你的button将在Holo.Light中使用的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 。 这就是为什么你的button被拉伸。

解决scheme
1.将你的Button minHeightminWidth设置为0。
2.使用这样的自定义样式。

 <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> 

3.使用ImageButton ,并通过setImage* (而不是setBackround* )方法设置您的图像。