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

时间:2012-10-15 19:02:32

标签: android android-layout button autoresize

所以我有四个按钮,它们都使用match_parent来表示高度和宽度。我使用“drawableTop”属性在按钮本身内有图像,我想制作它,所以我不需要为每个分辨率单独的图像。这是我拍的肖像截图。一个景观将会出现。

Buttons-Portrait

所以这看起来很好,除了我只有4种不同的图像分辨率并在手机上试用它们并没有产生积极的结果。有没有什么方法可以让我有一个更大的图像,比如只是“可绘制”并让它缩小以适应所有分辨率?如果没有,我该怎么办?我目前涵盖hdpi,ldpi,mdpi和xhdpi,但我想涵盖所有界限。还有什么其他密度?

如果我可以实现自动调整大小,我也不必禁止用户使用Landscape:

Buttons-Landscape

另外,这是xml:

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="match_parent"
    android:layout_weight="1"
    android:baselineAligned="false"
    android:orientation="horizontal" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:orientation="vertical"
        tools:ignore="NestedWeights" >

        <Button
            android:id="@+id/bMap"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:drawableTop="@drawable/ic_camera"
            android:text="Button" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:orientation="vertical" >

        <Button
            android:id="@+id/bCamera"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:drawableTop="@drawable/ic_camera"
            android:text="Button" />
    </LinearLayout>
</LinearLayout>

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="match_parent"
    android:layout_weight="1"
    android:baselineAligned="false"
    android:orientation="horizontal" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:orientation="vertical"
        tools:ignore="NestedWeights" >

        <Button
            android:id="@+id/bGallery"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:drawableTop="@drawable/ic_camera"
            android:text="Button" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:orientation="vertical" >

        <Button
            android:id="@+id/bPlants"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:drawableTop="@drawable/ic_camera"
            android:text="Button" />
    </LinearLayout>
</LinearLayout>

2 个答案:

答案 0 :(得分:5)

AFAIK,使用具有可绘制背景的Button并不容易,因为drawable不会随视图缩放。

我相信如果您将Button更改为ImageButton s,可以执行此操作,这会为缩放图像提供更多选项。

ImageButton类公开android:scaleType属性,您可以使用centerInside来缩小图像以适应ImageButton的边界。

同样使用ImageButton,您应该使用android:src而不是android:drawable来定义图片。

我不确定是否有办法在ImageButton上设置文本。您可能需要一个更高级的布局,包括LinearLayout中的ImageView和TextView,然后将该LinearLayout视为按钮(添加onClick等)。

答案 1 :(得分:0)

是的,你可以拥有一个更大的图像并让它缩小以适应所有分辨率。您可以通过编程方式实现此自动调整。从this answer查看using System; using System.Diagnostics; using System.IO; namespace XSD2CS { class Program { static void Main(string[] args) { Console.Write("Enter xsd file: "); string xsdFile = Console.ReadLine(); if (!File.Exists(xsdFile)) { Console.WriteLine("Error. File doesn't exists."); Environment.Exit(1); } Process p = new Process(); p.StartInfo.FileName = "XSD.exe"; p.StartInfo.WorkingDirectory = @"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin"; p.StartInfo.Arguments = "/c " + xsdFile; p.Start(); } } }