Android相对布局多屏问题

时间:2015-08-10 01:12:26

标签: android android-layout screen relativelayout

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? 任何建议将不胜感激

1 个答案:

答案 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);

希望这有效;