Android Relative Layout多屏问题
Android Relative Layout multiple screen problems
http://i.imgur.com/oC6fwya.png
这是我的布局截图
我在设计布局和 imageButtons、TextViews、滚动视图时使用了 Relativelayout,它们使用 dp 和 sp 值调整大小。在屏幕截图中,我展示了滚动视图和文本视图实际应该放置在哪里,当我放置它们时它工作正常但在其他屏幕上尝试时出现问题。
我做了大约 9 个不同的布局无论是 layout-swdp 还是 layout-normal 等限定符都可以在多个屏幕上工作,但是当我创建具有不同屏幕尺寸的新虚拟设备时,分辨率有时会按照我的需要放置布局,有时则不会。似乎目前我需要创建所有屏幕尺寸、分辨率和密度组合来实现我想要的,但这对我来说似乎不正常,我认为总共需要大约 30 种不同的布局来放置不同的组合滚动视图和文本视图到我想要的位置。
我正在使用的背景图像设置为相对布局背景 属性。我要问的是我能做些什么来解决我的问题,为不同的屏幕组合创建大约 30 种不同的布局是否正常?还是我以错误的方式解决问题?或者错误可能是在开始时将斑点放在背景图像上(使用 photoshop),其中将放置 textviews 和 scrollview?
任何建议将不胜感激
你可以试试这个:
/**
*
* @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);
希望这有效;
http://i.imgur.com/oC6fwya.png
这是我的布局截图
我在设计布局和 imageButtons、TextViews、滚动视图时使用了 Relativelayout,它们使用 dp 和 sp 值调整大小。在屏幕截图中,我展示了滚动视图和文本视图实际应该放置在哪里,当我放置它们时它工作正常但在其他屏幕上尝试时出现问题。
我做了大约 9 个不同的布局无论是 layout-swdp 还是 layout-normal 等限定符都可以在多个屏幕上工作,但是当我创建具有不同屏幕尺寸的新虚拟设备时,分辨率有时会按照我的需要放置布局,有时则不会。似乎目前我需要创建所有屏幕尺寸、分辨率和密度组合来实现我想要的,但这对我来说似乎不正常,我认为总共需要大约 30 种不同的布局来放置不同的组合滚动视图和文本视图到我想要的位置。
我正在使用的背景图像设置为相对布局背景 属性。我要问的是我能做些什么来解决我的问题,为不同的屏幕组合创建大约 30 种不同的布局是否正常?还是我以错误的方式解决问题?或者错误可能是在开始时将斑点放在背景图像上(使用 photoshop),其中将放置 textviews 和 scrollview?
任何建议将不胜感激
你可以试试这个:
/**
*
* @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);
希望这有效;