有啥办法可以让按钮上的图像自动调整大小以适应屏幕?
Posted
技术标签:
【中文标题】有啥办法可以让按钮上的图像自动调整大小以适应屏幕?【英文标题】:Is there any way I can make images on buttons auto-resize to fit the screen?有什么办法可以让按钮上的图像自动调整大小以适应屏幕? 【发布时间】:2012-10-05 19:39:24 【问题描述】:所以我有四个按钮,它们都使用 match_parent 来表示高度和宽度。我使用“drawableTop”属性在按钮本身中有图像,我想这样做,所以我不需要为每个分辨率单独的图像。这是我拍的肖像截图。风景一会进来。
所以这看起来不错,但我只有 4 种不同的图像分辨率,在我的手机上试用它们并没有产生积极的结果。有什么办法可以让我只拥有一个更大的图像,比如“可绘制”并让它缩小以适应所有分辨率?如果没有,我该怎么办?我目前涵盖 hdpi、ldpi、mdpi 和 xhdpi,但我想涵盖所有范围。还存在哪些其他密度?
如果我可以实现自动调整大小,我也不必禁止用户使用 Landscape:
另外,这里是 xml:
<LinearLayout
android:layout_
android:layout_
android:layout_weight="1"
android:baselineAligned="false"
android:orientation="horizontal" >
<LinearLayout
android:layout_
android:layout_
android:layout_weight="1"
android:orientation="vertical"
tools:ignore="NestedWeights" >
<Button
android:id="@+id/bMap"
android:layout_
android:layout_
android:drawableTop="@drawable/ic_camera"
android:text="Button" />
</LinearLayout>
<LinearLayout
android:layout_
android:layout_
android:layout_weight="1"
android:orientation="vertical" >
<Button
android:id="@+id/bCamera"
android:layout_
android:layout_
android:drawableTop="@drawable/ic_camera"
android:text="Button" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_
android:layout_
android:layout_weight="1"
android:baselineAligned="false"
android:orientation="horizontal" >
<LinearLayout
android:layout_
android:layout_
android:layout_weight="1"
android:orientation="vertical"
tools:ignore="NestedWeights" >
<Button
android:id="@+id/bGallery"
android:layout_
android:layout_
android:drawableTop="@drawable/ic_camera"
android:text="Button" />
</LinearLayout>
<LinearLayout
android:layout_
android:layout_
android:layout_weight="1"
android:orientation="vertical" >
<Button
android:id="@+id/bPlants"
android:layout_
android:layout_
android:drawableTop="@drawable/ic_camera"
android:text="Button" />
</LinearLayout>
</LinearLayout>
【问题讨论】:
【参考方案1】:AFAIK,使用带有可绘制背景的Button
并不容易,因为可绘制对象不会随视图缩放。
如果您将Button
s 更改为ImageButton
s,我相信您可以做到这一点,这提供了更多缩放图像的选项。
ImageButton 类公开了android:scaleType
属性,您可以使用centerInside
来缩小图像以适应ImageButton 的边界。
对于ImageButton
,您应该使用android:src
而不是android:drawable
定义图像。
我不确定是否有办法在 ImageButton 上设置文本。您可能需要一个更高级的布局,由 LinearLayout 中的 ImageView 和 TextView 组成,然后将该 LinearLayout 视为按钮(添加 onClick 等)。
【讨论】:
是的,我对此进行了研究,发现 scaleType 可以满足我的需求,但似乎没有办法像我在上图中那样在 ImageButtons 上放置文本,对吧? :// @BackpackOnHead - 不,恐怕不是。您可能会发现这个问题很有用:***.com/questions/1532876/… @TIm - 是的,这就是我学会做drawableTop的地方。看起来我不能完全按照我的需要做,但也许 LinearLayout 选项可能是我需要采取的路线。我会等待其他解决方案,但现在你的似乎是最好的。谢谢! @Tim - 你的方法非常有效。我将标准按钮 xml 用于 LinearLayout 的背景可绘制对象,因此它可以获取所有应有的动画。谢谢!【参考方案2】:是的,您可以拥有一张更大的图像,然后将其缩小以适应所有分辨率。您可以以编程方式实现此自动调整大小。看看DroidUtils.scaleButtonDrawables
来自this answer。
【讨论】:
以上是关于有啥办法可以让按钮上的图像自动调整大小以适应屏幕?的主要内容,如果未能解决你的问题,请参考以下文章