避免大图像将其他布局推出屏幕

时间:2011-08-18 20:57:03

标签: java android xml layout

我已经尝试了几个小时但没有取得任何成就。

这是我的代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity="center">

    <LinearLayout
        android:layout_height="wrap_content"
        android:id="@+id/linearLayout1"
        android:orientation="vertical"
        android:layout_width="wrap_content"
        android:layout_gravity="center">
        <TextView
            android:layout_gravity="center"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:text="A dog"
            android:id="@+id/textView1"
            android:textSize="50sp"></TextView>
        <ImageView
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:src="@drawable/dog"
            android:id="@+id/imageView1"></ImageView>
    </LinearLayout>

</LinearLayout>

正如您在下面的屏幕中看到的,在小屏幕和大屏幕中一切正常

Title in the top

但我真正需要的是将文字放在图像下方。在容器中更改其顺序的结果是:

Tittle in the bottom

适用于比图像高的屏幕,但对于小屏幕,文字不可见。我该如何解决这个问题?请为解决方案考虑以下几点:

  • 包含图片和文字的布局必须以其父级为中心(例如基础布局)(特别是对于长屏幕)
  • 如果屏幕较大,可绘制的应保持其原始大小,并在屏幕较小时保持缩小(保持纵横比)

提前致谢

2 个答案:

答案 0 :(得分:1)

您可以缩放图像以适合特定的宽度和高度

请参阅此处Scale

编辑:

您可以尝试类似

的内容
public static final ImageView.ScaleType CENTER_INSIDE

自:API级别

均匀缩放图像(保持图像的纵横比),使图像的尺寸(宽度和高度)等于或小于视图的相应尺寸(减去填充)。然后图像在视图中居中。从XML,使用以下语法:

android:scaleType="centerInside

编辑:您也可以使用位图..

像...这样的东西。

         Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.icon);

        int width = bitmap.getWidth();
        int height = bitmap.getHeight();
        int newWidth = 640;
        int newHeight = 480;

        float scaleWidth = ((float) newWidth) / width;
        float scaleHeight = ((float) newHeight) / height;

        Matrix matrix = new Matrix();
        matrix.postScale(scaleWidth, scaleHeight);

        // create the new Bitmap object
        Bitmap resizedBitmap = Bitmap.createBitmap(bitmap, 0, 0, width,
                height, matrix, true);
        BitmapDrawable bmd = new BitmapDrawable(resizedBitmap);

        ImageView imageView = new ImageView(this);
        imageView.setImageDrawable(bmd);
        imageView.setScaleType(ScaleType.CENTER);

        linearLayout.addView(imageView, new LinearLayout.LayoutParams(
                LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
        setContentView(linearLayout);       }
}

答案 1 :(得分:0)

我测试了该代码,它具有您正在寻找的行为。如果您需要更多帮助,请告诉我

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
>
    <LinearLayout
        android:layout_width="fill_parent"
        android:orientation="vertical"
        android:layout_height="wrap_content"
        android:id="@+id/linearLayout1"
    >
        <RelativeLayout
            android:id="@+id/relativeLayout1"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:layout_width="wrap_content"
            android:layout_gravity="center"
        >
            <LinearLayout
                android:layout_height="wrap_content"
                android:orientation="vertical"
                android:layout_width="wrap_content"
                android:id="@+id/linear2"
                android:layout_alignParentBottom="true"
            ></LinearLayout>
            <TextView
                android:layout_above="@id/linear2"
                android:text="TextView"
                android:textAppearance="?android:attr/textAppearanceLarge"
                android:layout_height="wrap_content"
                android:id="@+id/textView1"
                android:gravity="center"
                android:layout_width="wrap_content"
                android:layout_centerHorizontal="true"
            ></TextView>
            <ImageView
                android:id="@+id/imageiffel"
                android:src="@drawable/my_image"
                android:layout_above="@id/textView1"
                android:layout_height="wrap_content"
                android:layout_width="wrap_content"
            ></ImageView>
        </RelativeLayout>
    </LinearLayout>

</LinearLayout>