Làm thế nào để khóa hướng của ứng dụng Android thành dọc trên điện thoại và ngang trong máy tính bảng?


82

Tôi đang phát triển một ứng dụng Android có hướng mà tôi không muốn thay đổi thành chế độ ngang khi người dùng xoay thiết bị. Ngoài ra, tôi muốn hướng bị khóa là chế độ dọc trên điện thoại và chế độ ngang trên máy tính bảng. Điều này có thể đạt được không, nếu có bằng cách nào? Cảm ơn.


2
@CommonsWare: Ứng dụng của tôi có các menu với danh sách dài được duyệt hiệu quả hơn nhiều ở chế độ potrait trên điện thoại.
Ankit Rawat,

3
Sau đó, đưa ra một thiết kế GUI tốt hơn, một thiết kế tôn trọng khả năng sử dụng thiết bị của họ theo bất kỳ hướng nào của người dùng.
CommonsWare

Câu trả lời:


155

Bạn chỉ cần xác định thuộc tính bên dưới bên trong phần tử hoạt động trong AndroidManifest.xmltệp của mình . Nó sẽ hạn chế hướng của bạn thành dọc.

android: screenOrientation = "chân dung"

Thí dụ:

        <activity
            android:name="com.example.demo_spinner.MainActivity"
            android:label="@string/app_name"
            android:screenOrientation="portrait" >
        </activity>

Ngoài ra, theo nhận xét của Eduard Luca bên dưới, bạn cũng có thể sử dụng screenOrientation="sensorPortrait"nếu muốn bật xoay 180 độ.


21
Hoặc sensorPortraitnếu bạn muốn người dùng có thể xoay màn hình 180 độ :)
Eduard Luca

44

Bạn phải thêm android:screenOrientation="portrait"chỉ thị trong của bạn AndroidManifest.xml. Điều này sẽ được thực hiện trong <activity>thẻ của bạn .

Ngoài ra, hướng dẫn dành cho nhà phát triển Android nói rằng:

[...] bạn cũng nên khai báo rõ ràng rằng ứng dụng của bạn yêu cầu hướng dọc hoặc ngang với phần tử. Ví dụ <uses-feature android:name="android.hardware.screen.portrait" />,.


6
1 cho các trích dẫn thực hành tốt và bởi vì điều này sẽ là câu trả lời được chấp nhận, vì nó là chính xác và đã được đăng đầu tiên ...
Eduard Luca

7
Có một cách toàn cầu?
Tyler Pfaff

21

Tôi có thể thấy rằng bạn đã chấp nhận một câu trả lời không giải quyết được hoàn toàn vấn đề của bạn:

android:screenOrientation="portrait" 

Điều này sẽ buộc ứng dụng của bạn ở chế độ dọc trên cả điện thoại và máy tính bảng.

Bạn có thể buộc ứng dụng theo hướng "ưu tiên" của thiết bị bằng cách sử dụng

android:screenOrientation="nosensor"

Điều này sẽ dẫn đến việc buộc ứng dụng của bạn phải dọc trên hầu hết các điện thoại và ngang trên máy tính bảng. Có nhiều điện thoại có bàn phím được thiết kế cho chế độ ngang. Buộc ứng dụng của bạn ở chế độ dọc có thể khiến ứng dụng gần như không sử dụng được trên các thiết bị như vậy. Android gần đây cũng đang chuyển sang các loại thiết bị khác. Tốt nhất là chỉ để thiết bị chọn hướng ưu tiên.


Đối với những người tò mò về cài đặt "Nasnsor", bạn có thể đọc thêm trong tài liệu chính thức tại developer.android.com/guide/topics/manifest/activity-element
James Jordan Taylor

11

Có thể là .. bạn phải xác định đó là máy tính bảng hay điện thoại bằng cách lập trình ... Đầu tiên hãy kiểm tra thiết bị là điện thoại hay máy tính bảng

Xác định xem thiết bị là điện thoại thông minh hay máy tính bảng?

Máy tính bảng hoặc điện thoại - Android

Sau đó......

if(isTablet)
{
      setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);      
}else
{
      setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}

Xin chào @Bhavesh, Ứng dụng này không hoạt động trên thiết bị di động Android 9.
Manikandan K

Làm thế nào chúng tôi có thể xác định nếu nó là máy tính bảng ... bạn đã không giải thích rằng ...
Abdul Wahid

Bạn có thể xem câu trả lời đã chỉnh sửa. Tôi có kèm theo cách xác định thiết bị là điện thoại thông minh hay máy tính bảng?
Bhavesh Hirpara

3
<activity android:name=".yourActivity"
          android:screenOrientation="portrait" ... />

thêm vào hoạt động chính và thêm

android:configChanges="keyboardHidden"

để giữ cho chương trình của bạn không thay đổi chế độ khi bàn phím được gọi.


1

Đặt Hướng màn hình thành dọc trong tệp Tệp kê khai bên dưới Thẻ hoạt động.


0
android:screenOrientation="locked"

trong <application>cho tất cả các ứng dụng trong <activity>cho hoạt động thực tế


0

Đặt Hướng màn hình thành dọc trong tệp Tệp kê khai bên dưới Thẻ hoạt động.

Đây là ví dụ

Bạn cần nhập mọi Hoạt động

Thêm các dòng sau vào hoạt động

cho chân dung

android:screenOrientation="portrait"
tools:ignore="LockedOrientationActivity"

cho phong cảnh

android:screenOrientation="landscape"
tools:ignore="LockedOrientationActivity"

Đây là ví dụ về MainActivity

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="org.thcb.app">
 
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <activity android:name=".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>

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

</manifest>


-1

Chỉ cần thêm:

android:screenOrientation="portrait"

trong " AndroidManifest.xml ":

<activity
android:screenOrientation="portrait"
android:name=".MainActivity"
android:label="@string/app_name">
</activity>
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.