Liên hệ
android java

Xác định trạng thái xoay màn hình trong Android

Xác định trạng thái vị trí layout màn hình đứng hay ngang và nhận góc xoay hiện tại của thiết bị Android

Lấy trạng thái màn hình ngang hay đứng

Để xác định được trạng thái Layout màn hình sử dụng lớp Display với phương thức getDefaultDisplay(). Trong Activity lấy được Display với mã sau:

Display display =
                ((WindowManager)getSystemService(Context.WINDOW_SERVICE))
                        .getDefaultDisplay();

Có được Display có thể biết trạng thái xoay Layout hiện tại với phương thức getRotation(), ví dụ:

switch (display.getRotation()) {
    case Surface.ROTATION_0:
        huongmanhinh.setText("Màn hình LAYOUT đứng: 0°");
        break;

    case Surface.ROTATION_90:
        huongmanhinh.setText("Màn hình LAYOUT ngang: 90°");
        break;

    case Surface.ROTATION_180:
        huongmanhinh.setText("Màn hình LAYOUT ngang: 180°");
        break;

    case Surface.ROTATION_270:
        huongmanhinh.setText("Màn hình LAYOUT đứng: 270°");
        break;
}
xoaymanhinh

Nhận thông tin khi góc nghiêng điện thoại thay đổi

Khi xoay điện thoại, cảm biến góc nghiêng sẽ cho biết độ nghiêng của điện thoại, muốn nhận sự kiện này hãy sử dụng OrientationEventListener, ví dụ:

OrientationEventListener myOrientationEventListener =
    new OrientationEventListener(this, SensorManager.SENSOR_DELAY_NORMAL) {
        @Override
        public void onOrientationChanged(int i) {
            //i là góc nghiêng
        }
};
myOrientationEventListener.enable();
goc nghieng android

Ví dụ

Tạo một Activity có tên Orientation, hiện thị thông tin góc xoay màn hình, trạng thái Layout

activity_orientation.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="net.xuanthulab.appbarexample.Orientation">
    <LinearLayout
        android:padding="5dp"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <TextView
            android:textSize="20sp"
            android:id="@+id/huongmanhinh"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
        <TextView
            android:textSize="20sp"
            android:id="@+id/gocnghieng"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    </LinearLayout>

</android.support.constraint.ConstraintLayout>

Orientation.java


public class Orientation extends AppCompatActivity {

    Display display;
    TextView huongmanhinh, gocnghieng;
    OrientationEventListener myOrientationEventListener;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_orientation);
        huongmanhinh = findViewById(R.id.huongmanhinh);
        gocnghieng   = findViewById(R.id.gocnghieng);


        InfoScreen();
        ListenerRotate();
    }

    //Listener nhận sự kiện thay đổi góc nghiêng điện thoại
    void ListenerRotate() {
        myOrientationEventListener =
            new OrientationEventListener(this, SensorManager.SENSOR_DELAY_NORMAL) {
            @Override
            public void onOrientationChanged(int i) {
                gocnghieng.setText("Góc nghiêng: "+i+"°");
                InfoScreen();
            }
        };
        myOrientationEventListener.enable();
    }


    /**
     * Xác định màn hình PORTRAIT, LANDSCAPE
     */
    void InfoScreen() {

        Display display =
                ((WindowManager)getSystemService(Context.WINDOW_SERVICE))
                        .getDefaultDisplay();

        switch (display.getRotation()) {
            case Surface.ROTATION_0:
                huongmanhinh.setText("Màn hình LAYOUT đứng: 0°");
                break;

            case Surface.ROTATION_90:
                huongmanhinh.setText("Màn hình LAYOUT ngang: 90°");
                break;

            case Surface.ROTATION_180:
                huongmanhinh.setText("Màn hình LAYOUT ngang: 180°");
                break;

            case Surface.ROTATION_270:
                huongmanhinh.setText("Màn hình LAYOUT đứng: 270°");
                break;
        }
    }


}

Vui lòng đăng ký ủng hộ kênh