无论设备大小如何,都可以将多个Android ImageViews缩放到屏幕上的All Fit

时间:2013-08-22 11:55:27

标签: android imageview scale

我是Android新手。我在一个活动中有多个图像视图,并将添加更多。我正在使用这些图像视图作为按钮。我遇到的问题是让它们全部正确匹配并根据屏幕大小进行缩放。我可以帮忙解决这个问题吗?

这是XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

    <ImageView
        android:id="@+id/homeBackground"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentRight="true"
        android:scaleType="centerCrop"
        android:src="@drawable/homebackground" />

    <ImageView
        android:id="@+id/publicAffairs"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="5dp"
        android:layout_marginTop="5dp"
        android:src="@drawable/publicaffairs" />

    <ImageView
        android:id="@+id/actionAlerts"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_marginTop="5dp"
        android:layout_marginLeft="1dp"
        android:layout_toRightOf="@+id/publicAffairs"
        android:src="@drawable/actionalerts" />

</RelativeLayout>

我用作按钮的两个图像视图不会根据设备大小进行缩放。

enter image description here

1 个答案:

答案 0 :(得分:0)

是的我以前遇到过这个问题。请参阅我的其他答案:

Placing a point at specific position on different screen densitiesResizing images from server

您需要做的是找到这个新屏幕比旧屏幕大了多少,首先获取您正在测试的设备的尺寸,然后将它们放入widthOfStandardDevice和heightOfStandardDevice.Ance你知道多大新屏幕是您使用DisplayMetrics测试的屏幕,您可以使用两个乘法器将所有内容相乘,以使位置和大小相对于屏幕大小相同。

DisplayMetrics displaymetrics = new DisplayMetrics();

getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);

height = displaymetrics.heightPixels;

width = displaymetrics.widthPixels;

float widthMultiplier = width/widthOfStandardDevice;

float heightMultiplier = height/heightOfStandardDevice;

int image_width = (int)(/*regular image width on your test device*/ * widthMultiplier);

int image_height = (int)(/*regular image height on your test device*/ * heightMultiplier);

LayoutParams params = new LayoutParams(image_width, image_height);

params.setMargins(/*regular left margin*/ * widthMultiplier,
    /*regular bottom margin*/ * heightMultiplier,);
ImageView imageView = (ImageView)findViewById(R.id.imageView1);

imageView.setLayoutParams(params);

RelativeLayout x = (RelativeLayout)findViewById(R.id.relative_layout_id);

x.addView(imageView);

另外,你应该像这样添加id到ImageViews和RelativeLayout:

android:id="@+id/your_id_here"

对于我们之前在代码中创建的imageView,id为:

android:id="@+id/imageView1"

用于布局:

android:id="@+id/relative_layout_id"