Узнайте, является ли устройство Android книжным или альбомным для обычного использования? - PullRequest
39 голосов
/ 09 сентября 2010

Есть ли способ узнать, является ли устройство портретным или альбомным по умолчанию? Я имею в виду, как вы обычно используете устройство.

Большинство телефонов имеют портретный экран для обычного использования, но есть ли какой-нибудь флажок для выяснения этого?

Ответы [ 8 ]

148 голосов
/ 21 мая 2011

Вы можете сделать это:

Для Lanscape

if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE){
    //Do some stuff
}

Для портрета

if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT){
    //Do some stuff
}

Проверить: http://developer.android.com/reference/android/content/res/Configuration.html#orientation

3 голосов
/ 24 февраля 2016

Благодаря @Codeversed, чей отличный ответ очень близок к работе (но НЕ как показано), у меня есть MainActivity, который работает хорошо.Все, что нужно сделать, это переместить .enable туда, где он может быть выполнен ВНЕ блока on, например сразу после объявления myOrientationEventListener.

import android.app.Activity;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.util.Log;
import android.view.OrientationEventListener;

public class MainActivity extends Activity
{
    public static boolean PORTRAIT_MODE = true;
    OrientationEventListener myOrientationEventListener ;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        myOrientationEventListener = new OrientationEventListener(this,
                SensorManager.SENSOR_DELAY_NORMAL)
        {
            @Override
            public void onOrientationChanged(int orientation)
            {
                PORTRAIT_MODE = ((orientation < 100) || (orientation > 280));
                Log.w("Orient", orientation + " PORTRAIT_MODE = " + PORTRAIT_MODE);
            }
        };
        Log.w("Listener", " can detect orientation: " + myOrientationEventListener.canDetectOrientation() + " ");
        myOrientationEventListener.enable();
    }
}
2 голосов
/ 02 сентября 2014

В своей деятельности сделайте это:

if(getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)

например ...

2 голосов
/ 21 мая 2011
package com.android.portraitandlandscape;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Display;
import android.widget.Toast;

public class PortraitLandScape extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    Display display = getWindowManager().getDefaultDisplay(); 
    int width = display.getWidth();
    int height = display.getHeight();

    Log.v("log_tag", "display width is "+ width);
    Log.v("log_tag", "display height is "+ height);

    if(width<height){
        Toast.makeText(getApplicationContext(),"Device is in portrait mode",Toast.LENGTH_LONG ).show();
    }
    else{
        Toast.makeText(getApplicationContext(),"Device is in landscape  mode",Toast.LENGTH_LONG ).show();
    }

 }
}

Вы можете попробовать этот код для проверки, находится ли устройство в горизонтальной или вертикальной ориентации.

1 голос
/ 28 апреля 2017

У меня была похожая проблема. Решил это путем сравнения значений поворота и ориентации. Нет необходимости использовать датчики или прослушиватели, просто вызывайте метод isDefaultLandscape всякий раз, когда захотите.

private boolean isDefaultLandscape(final Context context)
{
    Display display = ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
    int rotation = display.getRotation();
    int orientation = context.getResources().getConfiguration().orientation;

    switch (rotation)
    {
        case Surface.ROTATION_180:
        case Surface.ROTATION_0:
        {
            return orientation == Configuration.ORIENTATION_LANDSCAPE;
        }
        default:
        {
            return orientation == Configuration.ORIENTATION_PORTRAIT;
        }
    }
}
1 голос
/ 23 июня 2011

Я не уверен, поможет ли это, но я написал быстрый пример, который покажет вам, как иметь слушателя ... который позволит вам выяснить, в какой вы ориентации.

0 голосов
/ 22 февраля 2019

Это просто , просто блок If-Else:

if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
    // landscape
} else {
    // portrait
}
0 голосов
/ 20 мая 2018
// Current orientation
public boolean landscape = false;

public boolean isLandscape(){

    DisplayMetrics displaymetrics = new DisplayMetrics();
    context.getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
    int width = displaymetrics.widthPixels;
    int height = displaymetrics.heightPixels;

    if(width<height){
        landscape = false;
    }
    else{
        landscape = true;
    }

    return landscape;

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...