在Android中布置ImageButtons,如果太大则会缩小

时间:2012-06-10 23:16:09

标签: android android-layout relativelayout imagebutton

我正在开发一个Android应用程序的主屏幕,我正在尝试按照以下方向在android中布置4个ImageButtons:

a | b
_____

c | d

例如,A位于屏幕的左上方,b位于屏幕的右上方,c位于屏幕的左下方,d位于屏幕右下方的中央。所有图像都是512x512像素,因此,由于它们非常大,如果屏幕尺寸很小,应自动缩小。我不关心拉伸它们。

我已经在Android中尝试了基本上所有不同类型的布局,而我正在努力解决这个问题,经过2.5小时的实验和研究后,我正在寻求帮助。有谁知道如何做这个或一个样本开源应用程序这样做?

2 个答案:

答案 0 :(得分:3)

您应该在LinearLayouts和ImageButtons上设置权重,并将ImageButton ScaleTypes设置为fitXY,如此

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical">
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="1.0"
        android:orientation="horizontal>
        <ImageButton
            android:src="@drawable/myimage1"
            android:layout_height="fill_parent"
            android:layout_width="0dp"
            android:layout_weight="1.0"
            android:scaleType="fitXY"/>
        <ImageButton
            android:src="@drawable/myimage2"
            anroid:layout_height="fill_parent"
            android:layout_width="0dp"
            android:layout_weight="1.0"
            android:scaleType="fitXY"/>
    </LinearLayout>
    <LinearLayout
         //same as above horizontal layout with same children for buttons 3 and 4
    </LinearLayout>
</LinearLayout>

权重根据儿童总重量的百分比来划分空间。因此,如果两个孩子的体重都是1.0,他们就会获得50%的空间。为了使权重作用于该视图,您应指定要将权重计算为0dp的维度。 ScaleType fitXY只是将图像放入ImageButton可用的空间。

答案 1 :(得分:0)

编辑:似乎趋势是在发布代码之前或之后有某种解释。 下面的解决方案由不健康的LinearLayouts和嵌套权重组成。我首先将屏幕分成上半部分和下半部分,然后再分左右两半(注意交替方向) - 给我们四分之一。我假设你希望你的图像在那个区域的中心某处,所以我们通过嵌套weightSum = 3 LinearLayouts进一步将它分成9,3x3矩形。最后一步是在3x3网格的中间LinearLayout处放置ImageButton(我有ImageView,但这无关紧要),并给它一个 centerInside 的scaleType - 如果你这个scaleType是完美的拥有足够大的图像,不用担心拉伸它来填充你的布局。另外,它不会扭曲纵横比。另外,一个重要因素是使用 android:src 而不是android:background,因此ImageView会尊重scaleType。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:weightSum="2">
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="0dip"
        android:layout_weight="1"
        android:weightSum="2"
        android:orientation="horizontal">
        <LinearLayout
            android:layout_width="0dip"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:weightSum="3"
            android:orientation="vertical">
            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="0dip"
                android:layout_weight="1">
            </LinearLayout>
            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="0dip"
                android:layout_weight="1"
                android:orientation="horizontal"
                android:weightSum="3">
                <LinearLayout
                    android:layout_width="0dip"
                    android:layout_height="fill_parent"
                    android:layout_weight="1">
                </LinearLayout>
                <LinearLayout
                    android:layout_width="0dip"
                    android:layout_height="fill_parent"
                    android:layout_weight="1">
                    <ImageView
                        android:layout_width="fill_parent"
                        android:layout_height="fill_parent"
                        android:src="@drawable/ic_launcher"
                        android:scaleType="centerInside">
                    </ImageView>
                </LinearLayout>
                <LinearLayout
                    android:layout_width="0dip"
                    android:layout_height="fill_parent"
                    android:layout_weight="1">
                </LinearLayout>
            </LinearLayout>
            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="0dip"
                android:layout_weight="1">
            </LinearLayout>
        </LinearLayout>
        <LinearLayout
            android:layout_width="0dip"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:weightSum="3"
            android:orientation="vertical">
            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="0dip"
                android:layout_weight="1">
            </LinearLayout>
            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="0dip"
                android:layout_weight="1"
                android:orientation="horizontal"
                android:weightSum="3">
                <LinearLayout
                    android:layout_width="0dip"
                    android:layout_height="fill_parent"
                    android:layout_weight="1">
                </LinearLayout>
                <LinearLayout
                    android:layout_width="0dip"
                    android:layout_height="fill_parent"
                    android:layout_weight="1">
                    <ImageView
                        android:layout_width="fill_parent"
                        android:layout_height="fill_parent"
                        android:src="@drawable/ic_launcher"
                        android:scaleType="centerInside">
                    </ImageView>
                </LinearLayout>
                <LinearLayout
                    android:layout_width="0dip"
                    android:layout_height="fill_parent"
                    android:layout_weight="1">
                </LinearLayout>
            </LinearLayout>
            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="0dip"
                android:layout_weight="1">
            </LinearLayout>
        </LinearLayout>
    </LinearLayout>
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="0dip"
        android:layout_weight="1"
        android:weightSum="2"
        android:orientation="horizontal">
        <LinearLayout
            android:layout_width="0dip"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:weightSum="3"
            android:orientation="vertical">
            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="0dip"
                android:layout_weight="1">
            </LinearLayout>
            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="0dip"
                android:layout_weight="1"
                android:orientation="horizontal"
                android:weightSum="3">
                <LinearLayout
                    android:layout_width="0dip"
                    android:layout_height="fill_parent"
                    android:layout_weight="1">
                </LinearLayout>
                <LinearLayout
                    android:layout_width="0dip"
                    android:layout_height="fill_parent"
                    android:layout_weight="1">
                    <ImageView
                        android:layout_width="fill_parent"
                        android:layout_height="fill_parent"
                        android:src="@drawable/ic_launcher"
                        android:scaleType="centerInside">
                    </ImageView>
                </LinearLayout>
                <LinearLayout
                    android:layout_width="0dip"
                    android:layout_height="fill_parent"
                    android:layout_weight="1">
                </LinearLayout>
            </LinearLayout>
            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="0dip"
                android:layout_weight="1">
            </LinearLayout>
        </LinearLayout>
        <LinearLayout
            android:layout_width="0dip"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:weightSum="3"
            android:orientation="vertical">
            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="0dip"
                android:layout_weight="1">
            </LinearLayout>
            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="0dip"
                android:layout_weight="1"
                android:orientation="horizontal"
                android:weightSum="3">
                <LinearLayout
                    android:layout_width="0dip"
                    android:layout_height="fill_parent"
                    android:layout_weight="1">
                </LinearLayout>
                <LinearLayout
                    android:layout_width="0dip"
                    android:layout_height="fill_parent"
                    android:layout_weight="1">
                    <ImageView
                        android:layout_width="fill_parent"
                        android:layout_height="fill_parent"
                        android:src="@drawable/ic_launcher"
                        android:scaleType="centerInside">
                    </ImageView>
                </LinearLayout>
                <LinearLayout
                    android:layout_width="0dip"
                    android:layout_height="fill_parent"
                    android:layout_weight="1">
                </LinearLayout>
            </LinearLayout>
            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="0dip"
                android:layout_weight="1">
            </LinearLayout>
        </LinearLayout>
    </LinearLayout>
</LinearLayout>