Tôi muốn ứng dụng Android của tôi chỉ chạy ở chế độ dọc?


358

Tôi muốn ứng dụng Android của tôi chỉ chạy ở chế độ dọc? Làm thế nào tôi có thể làm điều đó?

Câu trả lời:


778

Trong bảng kê khai, đặt mục này cho tất cả các hoạt động của bạn:

<activity android:name=".YourActivity"
    android:configChanges="orientation"
    android:screenOrientation="portrait"/>

Hãy để tôi giải thích:

  • Với android:configChanges="orientation"bạn nói với Android rằng bạn sẽ chịu trách nhiệm về những thay đổi của định hướng.
  • android:screenOrientation="portrait" bạn đặt chế độ định hướng mặc định.

50
Sẽ không tuyệt vời nếu chúng ta có thể đặt định hướng "toàn cầu" cho TẤT CẢ các hoạt động trong Ứng dụng? Có vẻ như chúng tôi không có tùy chọn nào ngoài việc sao chép / dán thuộc tính "chân dung" vào mọi hoạt động ...
Eduardo Coelho

63
Đủ để thiết lậpandroid:screenOrientation="portrait"
Đến

11
@EduardoCoelho bạn thực sự có thể tạo một lớp cơ sở PortraitActivityvà trong cuộc gọi onCreate setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)Tất cả các hoạt động mở rộng này sẽ không xoay vòng
Twinone

1
@Twinone: Làm thế nào khi các hoạt động khác nhau muốn kế thừa từ các lớp con khác nhau Activity, giống như một hoạt động mở rộng từ ListActivitytrong khi các hoạt động khác mở rộng đơn giản từ Activity?
RestInPeace

3
@RestInPeace Vâng, điểm tốt. Nhưng đó không phải là ý tưởng của tôi sai, đó chỉ là Java không hỗ trợ nhiều kế thừa :)
Twinone

57

Trong Android Manifest File, đặt thuộc tính cho bạn <activity>rằngandroid:screenOrientation="portrait"


2
hãy để tôi thêm: từ Android Sudio 3.6 cần sử dụng android: screenOrientation = "fullSensor" hoặc android: screenOrientation = "unspecified". fullSensor Có nghĩa là bạn đã BẬT "Xoay" hoặc không, nó sẽ thay đổi hướng dựa trên việc bạn di chuyển điện thoại. Phương tiện không xác định nếu bạn BẬT tắt Xoay thì nó sẽ chỉ ở hướng đó và nếu không thì nó sẽ thay đổi hướng dựa trên việc bạn di chuyển điện thoại.
Kirguduck

24

Có hai cách,

  1. Thêm android:screenOrientation="portrait"cho mỗi Hoạt động trong Tệp kê khai
  2. Thêm this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);vào mỗi tệp java.

14
Tùy chọn thứ hai có tác dụng phụ khủng khiếp là nó sẽ khởi động lại hoạt động của bạn khi bắt đầu trong Portrait.
Joakim

4

trong bảng kê khai:

<activity android:name=".activity.MainActivity"
        android:screenOrientation="portrait"
        tools:ignore="LockedOrientationActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

hoặc: trong MainActivity

@SuppressLint("SourceLockedOrientationActivity")
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

Tôi nhận được app/src/main/AndroidManifest.xml; lineNumber: 20; columnNumber: 50; The prefix "tools" for attribute "tools:ignore" associated with an element type "activity" is not bound.. Thêm xmlns:tools="http://schemas.android.com/tools"vào phần tử gốc giải quyết vấn đề
Żabojad

3

Bài cũ tôi biết. Để chạy ứng dụng của bạn luôn ở chế độ dọc ngay cả khi định hướng có thể bị hoán đổi, v.v. (ví dụ trên máy tính bảng) Tôi đã thiết kế chức năng này được sử dụng để đặt thiết bị theo đúng hướng mà không cần biết cách dọc và ngang các tính năng được tổ chức trên thiết bị.

   private void initActivityScreenOrientPortrait()
    {
        // Avoid screen rotations (use the manifests android:screenOrientation setting)
        // Set this to nosensor or potrait

        // Set window fullscreen
        this.activity.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

        DisplayMetrics metrics = new DisplayMetrics();
        this.activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);

         // Test if it is VISUAL in portrait mode by simply checking it's size
        boolean bIsVisualPortrait = ( metrics.heightPixels >= metrics.widthPixels ); 

        if( !bIsVisualPortrait )
        { 
            // Swap the orientation to match the VISUAL portrait mode
            if( this.activity.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT )
             { this.activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); }
            else { this.activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT ); }
        }
        else { this.activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR); }

    }

Hoạt động như một lá bùa!

THÔNG BÁO: Thay đổi this.activitytheo hoạt động của bạn hoặc thêm nó vào hoạt động chính và xóa this.activity;-)


-5

tôi sử dụng

 android:screenOrientation="nosensor"

Sẽ rất hữu ích nếu bạn không muốn hỗ trợ chế độ dọc xuống.


nếu điều này thực hiện những gì tôi nghĩ, thì nó không thực sự buộc màn hình phải chân dung, điều mà bạn có thể muốn làm.
Lassi Kinnunen

Tại sao bạn không xóa bình luận này! nó không có ý nghĩa
Alexander Zaldostanov

Trong Tệp kê khai Android, chỉ cần thêm thuộc tính cho <hoạt động> mà android: screenOrientation = "Portrait"
Avinash Shinde

Cảm ơn câu trả lời của bạn, điều này hữu ích cho tôi.
Md. Shofiulla
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.