有啥办法可以让按钮上的图像自动调整大小以适应屏幕?

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 并不容易,因为可绘制对象不会随视图缩放。

如果您将Buttons 更改为ImageButtons,我相信您可以做到这一点,这提供了更多缩放图像的选项。

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。

【讨论】:

以上是关于有啥办法可以让按钮上的图像自动调整大小以适应屏幕?的主要内容,如果未能解决你的问题,请参考以下文章

无法让 UIImageView 调整大小以适应屏幕

使用 jquery mobile 调整图像大小以适应移动设备上的屏幕

如何调整窗体上的控件大小以适应不同的分辨率?

如何调整html中的图像大小以适应屏幕尺寸?

在静态背景图像上调整按钮大小和位置

调整网站宽度以适应 iPad 屏幕的宽度