【问题标题】:Drawable issue with theme主题的可绘制问题
【发布时间】:2013-12-31 23:09:34
【问题描述】:

在构建我的应用程序时,我刚开始使用 Theme.Light.NoTitleBar.Fullscreen 主题。我像这样为整个应用程序构建了所有布局,并让事情看起来像我想要的那样。布局中使用的一些可绘制对象具有专门设置的大小,而另一些则设置为 wrap_content。

然后我决定切换到 Holo light 主题。当我这样做时,设置为 wrap_content 的布局中使用的所有可绘制对象最终都会变大。几乎就像他们从一个更大的桶里拉出来一样。事实上,有些看起来像是被拉长了。

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

【问题讨论】:

  • 这些是你的图像,还是 android:drawable 图像?
  • 它们是我自己的图像。
  • 你的 minSdkVersion 是多少?
  • 现在设置为 8。
  • 你在哪里存储drawables?

标签: android android-theme android-drawable


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

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

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

    每种类型的含义都不太容易理解,所以最好花一分钟时间和它们一起玩

    【讨论】:

    • 我会在某个时候尝试一下,但我遇到的大多数问题实际上是按钮,而不是 ImageView。
    • 我看到我在上一条评论中没有很好地解释它。而不是按钮,你有扩展 ImageView 的 ImageButtom,所以你可以使用这些属性,其他一切都是一样的。你也可以尝试定义你的背景http://developer.android.com/reference/android/widget/ImageButton.html
    • @Ryan 是那些按钮或图像按钮?
    • 我知道他有按钮,但我说的是有imagebutton,所以所有的按钮都可以很容易地改成imagebuttons
    【解决方案3】:

    我的猜测是,出于某种原因,Holo 主题正在以低于 Light 的分辨率渲染您的图像。我的意思是,例如,您在 drawable-xhdpi 中有您的可绘制对象,而 Holo 将它们视为 drawable-hdpi。事实上,我没有任何证据证明这一点,但最近我一直在搞砸决议,我似乎很熟悉其中的区别。

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

    【讨论】:

      【解决方案4】:

      来自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.将ButtonminHeightminWidth设置为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*)方法设置图像。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多