我的布局中有三个元素,一个是TextView,另一个是ImageView。 TextView将位于顶部,2个ImageViews应位于下方。我希望它们占用等量的空间,我可以将textview对齐在空间的中间,而imageview则试图占用指定位置的宽度和高度。
现在我的图像是640 x 480.在某些设备上,它完美地占据了高度和宽度。但是,在具有不同分辨率的其他设备上,它可能只占用其宽度或高度,在它们之间留下空白空间。我使用权重为3个元素分配3个分配的空格。
由于屏幕分辨率不同,我在布局方面是新手。有没有办法在不同的分辨率设备上动态反映相同的东西?我不应该尝试通过android:layout_weight为每个元素分配空格吗?有解决方法吗?
答案 0 :(得分:0)
您可以在xml文件中尝试一些事项。首先,我会尝试使用RelativeLayout来定义适当的布局参数。您可以执行android:layout_above
和android: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上设计布局,并使用我在布局位置上看到的数字。这可确保我的应用支持任何解决方案