Получить размеры экрана в пикселях - PullRequest
1777 голосов
/ 19 июня 2009

Я создал несколько пользовательских элементов и хочу программно разместить их в верхнем правом углу (n пикселей от верхнего края и m пикселей от правого края). Поэтому мне нужно получить ширину экрана и высоту экрана, а затем установить положение:

int px = screenWidth - m;
int py = screenHeight - n;

Как мне получить screenWidth и screenHeight в основной активности?

Ответы [ 39 ]

17 голосов
/ 27 декабря 2012

Это код, который я использую для задания:

// `activity` is an instance of Activity class.
Display display = activity.getWindowManager().getDefaultDisplay();
Point screen = new Point();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) {
    display.getSize(screen);
} else {            
    screen.x = display.getWidth();
    screen.y = display.getHeight();
}

Кажется достаточно чистым и, тем не менее, заботится об устаревании.

17 голосов
/ 13 мая 2013

Разве это не намного лучшее решение? DisplayMetrics поставляется со всем необходимым и работает с API 1.

public void getScreenInfo(){
    DisplayMetrics metrics = new DisplayMetrics();
    getActivity().getWindowManager().getDefaultDisplay().getMetrics(metrics);

    heightPixels = metrics.heightPixels;
    widthPixels = metrics.widthPixels;
    density = metrics.density;
    densityDpi = metrics.densityDpi;
}

Вы также можете получить фактическое отображение (включая декоры экрана, такие как строка состояния или панель программного обеспечения), используя getRealMetrics , но это работает только для 17+.

Я что-то упустил?

15 голосов
/ 18 июня 2012

Найти ширину и высоту экрана:

width = getWindowManager().getDefaultDisplay().getWidth();
height = getWindowManager().getDefaultDisplay().getHeight();

Используя это, мы можем получить самую последнюю версию SDK 13.

// New width and height
int version = android.os.Build.VERSION.SDK_INT;
Log.i("", " name == "+ version);
Display display = getWindowManager().getDefaultDisplay();
int width;
if (version >= 13) {
    Point size = new Point();
    display.getSize(size);
    width = size.x;
    Log.i("width", "if =>" +width);
}
else {
    width = display.getWidth();
    Log.i("width", "else =>" +width);
}
15 голосов
/ 16 марта 2012

Просто добавлю к ответу Франческо. Другой наблюдатель, который является более подходящим, если вы хотите узнать местоположение в окне или местоположение на экране, это ViewTreeObserver.OnPreDrawListener ()

Это также может быть использовано для поиска других атрибутов представления, которые в основном неизвестны во время onCreate (), например прокручиваемая позиция, масштабированная позиция.

14 голосов
/ 19 марта 2012

Используя следующий код в Activity.

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int height = metrics.heightPixels;
int wwidth = metrics.widthPixels;
14 голосов
/ 18 декабря 2013
DisplayMetrics dimension = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dimension);
int w = dimension.widthPixels;
int h = dimension.heightPixels;
11 голосов
/ 16 марта 2013

Нужно сказать, что если вы не в Activity, а в View (или в вашей области видимости есть переменная типа View), нет необходимости использовать WINDOW_SERVICE. Тогда вы можете использовать как минимум два способа.

Первый:

DisplayMetrics dm = yourView.getContext().getResources().getDisplayMetrics();

Второе:

DisplayMetrics dm = new DisplayMetrics();
yourView.getDisplay().getMetrics(dm);

Все эти методы, которые мы здесь вызываем, не устарели.

11 голосов
/ 27 июня 2012
public class AndroidScreenActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        DisplayMetrics dm = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(dm);
        String str_ScreenSize = "The Android Screen is: "
                                   + dm.widthPixels
                                   + " x "
                                   + dm.heightPixels;

        TextView mScreenSize = (TextView) findViewById(R.id.strScreenSize);
        mScreenSize.setText(str_ScreenSize);
    }
}
11 голосов
/ 06 января 2012

Я обнаружил, что сделал свое дело.

Rect dim = new Rect();
getWindowVisibleDisplayFrame(dim);
9 голосов
/ 04 сентября 2017

Для получения размеров экрана используйте метрики отображения

DisplayMetrics displayMetrics = new DisplayMetrics();
if (context != null) 
      WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
      Display defaultDisplay = windowManager.getDefaultDisplay();
      defaultDisplay.getRealMetrics(displayMetrics);
    }

Получить высоту и ширину в пикселях

int width  =displayMetrics.widthPixels;
int height =displayMetrics.heightPixels;
...