正确缩放ImageView和TextView

时间:2013-12-11 02:11:45

标签: android android-layout android-imageview

我的布局中有三个元素,一个是TextView,另一个是ImageView。 TextView将位于顶部,2个ImageViews应位于下方。我希望它们占用等量的空间,我可以将textview对齐在空间的中间,而imageview则试图占用指定位置的宽度和高度。

现在我的图像是640 x 480.在某些设备上,它完美地占据了高度和宽度。但是,在具有不同分辨率的其他设备上,它可能只占用其宽度或高度,在它们之间留下空白空间。我使用权重为3个元素分配3个分配的空格。

由于屏幕分辨率不同,我在布局方面是新手。有没有办法在不同的分辨率设备上动态反映相同的东西?我不应该尝试通过android:layout_weight为每个元素分配空格吗?有解决方法吗?

3 个答案:

答案 0 :(得分:0)

您可以在xml文件中尝试一些事项。首先,我会尝试使用RelativeLayout来定义适当的布局参数。您可以执行android:layout_aboveandroid:layout_alignleft之类的操作,将图像放在相对于父容器的位置,将TextView放在顶部。然后在ImageViews上使用android:scaleType。这应该将图像放在您想要的位置,然后适当地缩放它们(有关缩放的更多信息,请查看此link)。

您也可以尝试将ImageView放在FrameLayouts中,然后像以前一样将这些FrameLayout放在LinearLayout中。根据需要设置FrameLayout的宽度和高度,可能使用layout_weight,然后在ImageViews上使用android:scaleType。从性能角度来看,这种方法并不理想,因为绘制多个布局图层的成本可能很高,尤其是在列表视图中使用此布局或以其他方式重复时。

答案 1 :(得分:0)

您必须使用线性布局并将方向设置为“水平”,然后在textview和imageview中使用以下两行。     机器人:layout_weight = 1;     机器人:layout_width = 0;

答案 2 :(得分:-1)

尝试使用相对布局并在onCreate调用函数中调整尺寸 - 类似这样

private void setUpDimensions(){
    Display display = getWindowManager().getDefaultDisplay();
    DisplayMetrics dm = new DisplayMetrics();
    display.getMetrics(dm);

    ImageView iv = (ImageView) findViewById(R.id.imageSun);
    RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams)iv.getLayoutParams();
    params.height = display.getHeight() * 500 / 800;
    params.width = display.getWidth() * 250 / 1280;

    iv = (ImageView) findViewById(R.id.imageDesert);
    params = (RelativeLayout.LayoutParams)iv.getLayoutParams();
    params.height = display.getHeight() * 100 / 800;
    params.width = display.getWidth() * 100 / 1280;
    params.leftMargin = display.getWidth() * 207 / 1280;

    iv = (ImageView) findViewById(R.id.imageJungle);
    params = (RelativeLayout.LayoutParams)iv.getLayoutParams();
    params.height = display.getHeight() * 150 / 800;
    params.width = display.getWidth() * 150 / 1280;
    params.topMargin = display.getHeight() * 82 / 800;

    params = (RelativeLayout.LayoutParams)newGameButton.getLayoutParams();
    newGameButton.setTextSize(50 * display.getHeight() / 800 / dm.scaledDensity);
    newGameButton.setTypeface(worldData.getTypeface());
    params.leftMargin = display.getWidth() * 430 / 1280;
    params.topMargin = display.getHeight() * 310 / 800;

}

我在1280x800 res上设计布局,并使用我在布局位置上看到的数字。这可确保我的应用支持任何解决方案