http://i.imgur.com/oC6fwya.png
这是我的布局截图
我在设计布局时使用了Relativelayout,在布局中使用了ImageBut,TextViews,Scroll视图,这些视图的大小使用dp和sp值。在屏幕截图中,我展示了滚动视图和textview应该放在哪里,当我放置它们工作正常但是在尝试其他屏幕时出现问题。
我制作了大约9种不同的布局在layout-swdp或layout-normal之类的限定符可以在多个屏幕上工作,但是当我创建具有不同屏幕尺寸的新虚拟设备时,分辨率有时会按照我的需要放置布局,有时不放置。现在看来我需要创建所有的屏幕尺寸,分辨率和密度组合以达到我想要的效果,但这对我来说似乎不太正常,我认为总共需要大约30种不同的布局。将滚动视图和textview放在我想要的位置。
我正在使用的backgroundimage设置为相对布局背景属性。我要问的是我能做些什么来解决我的问题,为不同的屏幕组合创建大约30种不同的布局是否正常?还是我以错误的方式解决问题?或者错误是在开始时将斑点放在背景图像上(使用photoshop)将放置textview和scrollview?
任何建议将不胜感激
答案 0 :(得分:1)
你可以试试这个:
/**
*
* @param view
* @param wantedTop wanted space in original image (in px)
* @param originBgSize if images in drawble-mdpi, drawable-hdpi,... have same ratio, you can use any size of them
*/
@SuppressLint("NewApi")
private void calSize(View view, int wantedTop, Point originBgSize) {
double imageH = originBgSize.y;
// get your screen size in pixel
Display d = getWindowManager().getDefaultDisplay();
Point size = new Point();
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB_MR2) {
size.x = d.getWidth();
size.y = d.getHeight();
}
else {
d.getSize(size);
}
double ratioH = size.y / imageH;
int convertedTop = (int) (wantedTop * ratioH);
ViewGroup.LayoutParams params = view.getLayoutParams();
if (params instanceof MarginLayoutParams) {
((MarginLayoutParams) params).topMargin = convertedTop;
view.setLayoutParams(params);
}
}
然后在OnCreated
:
View tv = null;// your text view here;
// I assume that your image dimension is 720x1014, and the top position you want is 55px
Point oriSize = new Point(720, 1024);
calSize(tv, 55, oriSize);
希望这有效;