以编程方式支持多个屏幕

时间:2015-09-16 10:39:52

标签: android android-screen-support

我正在为Android编写应用程序,但我在编程方面支持多个屏幕时遇到了困难。我有一个随机跳到屏幕上的按钮。这是代码:

Random r = new Random();
x = r.nextInt(250 - 80);
y = r.nextInt(300 - 80);

btn.setX(x); 
btn.setY(y);

我正在努力的是为每个屏幕尺寸做这件事。现在,你可以看到我的按钮跳到一个随机的地方,但只有250 * 300大小的屏幕。如何识别屏幕尺寸并更改数字?或者我应该使用其他代码?

4 个答案:

答案 0 :(得分:0)

您需要以编程方式获取屏幕的尺寸。

    Point size = new Point();
    WindowManager w = getWindowManager();

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) {
        w.getDefaultDisplay().getSize(size);

        mWindowWidth = size.x;
        mWindowHeight = size.y;
    } else {
        Display d = w.getDefaultDisplay();
        mWindowWidth = d.getWidth();
        mWindowHeight = d.getHeight();
    }

重要的是,不要忘记检查方向。

private String getScreenOrientation(){    
    if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT)
        return "ORIENTATION_PORTRAIT";
    else if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE)
        return "ORIENTATION_LANDSCAPE";
    else
        return "";
}

但更好的研究this code

答案 1 :(得分:0)

嗨,请看下面的代码希望它能帮到你

int x ,y ;
int width,height;

DisplayMetrics displayMetrics = MainActivity.this.getResources().getDisplayMetrics();
width = displayMetrics.widthPixels;
height = displayMetrics.heightPixels;



Random r = new Random();
x = r.nextInt(width - 80);
y = r.nextInt(height - 80);


Log.d("","============= Random X :-> " + x);
Log.d("","============= Random y :-> " + y);

答案 2 :(得分:0)

要获取屏幕宽度和屏幕高度,请在主要活动中使用以下代码:

final Point sizePoint = new Point();
getWindowManager().getDefaultDisplay().getSize(sizePoint);
int mScreenWidth = sizePoint.x;
int mScreenHeight = sizePoint.y;

您可以使用它来初始化随机数生成器。

答案 3 :(得分:0)

您可以查看正在使用的屏幕

 int screenSize = getResources().getConfiguration().screenLayout
            & Configuration.SCREENLAYOUT_SIZE_MASK;
    DisplayMetrics dm = new DisplayMetrics();
    getActivity().getWindowManager().getDefaultDisplay().getMetrics(dm);

    switch (screenSize) {

        case Configuration.SCREENLAYOUT_SIZE_LARGE:
        //for large screen
        break;

        case Configuration.SCREENLAYOUT_SIZE_XLARGE:
           //for xlarge
            break;

        case Configuration.SCREENLAYOUT_SIZE_SMALL:
        //for small
        break;
        case Configuration.SCREENLAYOUT_SIZE_NORMAL:
          //for normal
            break;
    }

您可以从 dm

获取x和y坐标的值