获取当前设备屏幕的旋转角度
1、基本介绍
java
@Surface.Rotation
public int getRotation() {
synchronized (mLock) {
updateDisplayInfoLocked();
return getLocalRotation();
}
}
- 返回一个 int 常量
| 返回值 | 常量 | 说明 |
|---|---|---|
| 0 | Surface.ROTATION_0 | 未旋转 0°,竖屏,顶部朝上 |
| 1 | Surface.ROTATION_90 | 顺时针旋转 90°,左横屏,顶部朝左 |
| 2 | Surface.ROTATION_180 | 旋转 180°,倒置,顶部朝下 |
| 3 | Surface.ROTATION_270 | 顺时针旋转 270°,右横屏,顶部朝右 |
- 注:这里的顺时针是相对于设备的自然方向而言的,而不是相对于你(用户)的视觉方向
2、演示
xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/root"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#F5F5F5"
android:gravity="center"
android:orientation="vertical">
<TextView
android:id="@+id/tv_info"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:lineSpacingExtra="12dp"
android:textSize="24sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="32dp"
android:text="\n点击屏幕刷新"
android:textColor="#999"
android:textSize="14sp" />
</LinearLayout>
java
public class RotationTestActivity extends AppCompatActivity {
private TextView tvInfo;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EdgeToEdge.enable(this);
setContentView(R.layout.activity_rotation_test);
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.root), (v, insets) -> {
Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
return insets;
});
tvInfo = findViewById(R.id.tv_info);
findViewById(R.id.root).setOnClickListener(v -> showRotation());
showRotation();
}
private void showRotation() {
int rotation = getWindowManager().getDefaultDisplay().getRotation();
String[] map = {
"0 → 竖屏(顶部朝上)",
"1 → 左横屏(顶部朝左)",
"2 → 倒置(顶部朝下)",
"3 → 右横屏(顶部朝右)"
};
tvInfo.setText("getRotation() = " + rotation + "\n" + map[rotation]);
}
}