Câu trả lời:
Bạn có thể chỉ định android:screenOrientation="portrait"
cho từng hoạt động trong tệp manifest.xml của mình. Bạn không thể chỉ định tùy chọn này trên application
thẻ.
Tùy chọn khác là thực hiện theo chương trình, ví dụ như trong một Activity
lớp cơ sở:
@Override
public void onCreate(Bundle savedInstanceState) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
Tùy chọn cuối cùng là thực hiện với trình nghe vòng đời hoạt động chỉ khả dụng kể từ Android 4.0 (API 14+). Mọi thứ xảy ra trong một Application
lớp tùy chỉnh :
@Override
public void onCreate() {
super.onCreate();
registerActivityLifecycleCallbacks(new ActivityLifecycleAdapter() {
@Override
public void onActivityCreated(Activity a, Bundle savedInstanceState) {
a.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
});
}
ActivityLifecycleAdapter
chỉ là một lớp trợ giúp mà bạn sẽ cần tạo, đây sẽ là một triển khai trống ActivityLifecycleCallbacks
(vì vậy bạn không phải ghi đè lên từng phương thức của giao diện đó khi bạn chỉ cần một trong số chúng).
Có, bạn có thể thực hiện việc này cả lập trình và cho tất cả các hoạt động của mình để tạo ra một Tóm tắt mà tất cả các hoạt động của bạn đều mở rộng.
public abstract class AbstractActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
}
Hoạt động trừu tượng này cũng có thể được sử dụng cho một menu toàn cầu.
ActivityInfo.SCREEN_ORIENTATION_NOSENSOR
phải là câu trả lời tốt hơn vì dự định để thiết bị ở trạng thái mặc định vì một số thiết bị không có hướng Chân dung. Tuy nhiên, 'nosensor' KHÔNG hoạt động với tôi, vì vậy câu trả lời của @ arcone là viết tắt của tôi.
Bạn có thể làm điều này cho toàn bộ ứng dụng của mình mà không phải thực hiện tất cả các hoạt động của mình mở rộng một lớp cơ sở chung.
Bí quyết đầu tiên là đảm bảo bạn bao gồm một Application
lớp con trong dự án của bạn. Trong đó onCreate()
, được gọi khi ứng dụng của bạn khởi động lần đầu tiên, bạn đăng ký một ActivityLifecycleCallbacks
đối tượng (cấp độ API 14+) để nhận thông báo về các sự kiện vòng đời hoạt động.
Điều này mang đến cho bạn cơ hội để thực thi mã của riêng bạn bất cứ khi nào bất kỳ hoạt động nào trong ứng dụng của bạn được bắt đầu (hoặc dừng lại hoặc tiếp tục hoặc bất cứ điều gì). Tại thời điểm này, bạn có thể gọi setRequestedOrientation()
cho các hoạt động mới được tạo ra.
class MyApp extends Application {
@Override
public void onCreate() {
super.onCreate();
// register to be informed of activities starting up
registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(Activity activity,
Bundle savedInstanceState) {
// new activity created; force its orientation to portrait
activity.setRequestedOrientation(
ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
....
});
}
}
Bạn có thể thiết lập điều này trong tệp kê khai của bạn ..
android:name=".your launching activity name"
android:screenOrientation="portrait"
và bạn cũng có thể đạt được điều tương tự bằng cách viết mã trong tệp lớp của bạn như:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Thêm android: screenOrientation = "Portrait" vào hoạt động trong AndroidManifest.xml. Ví dụ:
<activity android:name=".SomeActivity"
android:label="@string/app_name"
android:screenOrientation="portrait">
Sử dụng:
android:screenOrientation="portrait"
Chỉ cần viết dòng này trong tệp kê khai của ứng dụng của bạn trong mỗi hoạt động mà bạn muốn hiển thị ở chế độ dọc.
Theo hướng dẫn của nhà phát triển Android:
"hướng" Hướng màn hình đã thay đổi - người dùng đã xoay thiết bị. Lưu ý: Nếu ứng dụng của bạn nhắm mục tiêu API cấp 13 trở lên (như được khai báo bởi các thuộc tính minSdkVersion và targetSdkVersion), thì bạn cũng nên khai báo cấu hình "screenSize", bởi vì nó cũng thay đổi khi thiết bị chuyển đổi giữa hướng dọc và hướng ngang.
"screenSize" Kích thước màn hình hiện tại đã thay đổi. Điều này thể hiện sự thay đổi kích thước hiện có, liên quan đến tỷ lệ khung hình hiện tại, do đó sẽ thay đổi khi người dùng chuyển đổi giữa phong cảnh và dọc. Tuy nhiên, nếu ứng dụng của bạn nhắm mục tiêu API cấp 12 trở xuống, thì hoạt động của bạn luôn tự xử lý thay đổi cấu hình này (thay đổi cấu hình này không khởi động lại hoạt động của bạn, ngay cả khi chạy trên thiết bị Android 3.2 trở lên). Đã thêm trong API cấp 13.
Vì vậy, trong tệp AndroidManifest.xml, chúng ta có thể đặt:
<activity
android:name=".activities.role_activity.GeneralViewPagerActivity"
android:label="@string/title_activity_general_view_pager"
android:screenOrientation="portrait"
android:configChanges="orientation|keyboardHidden|screenSize"
>
</activity>
Thêm <preference name="orientation" value="portrait" />
dưới <widget>
trong config.xml tôi làm việc cho tôi.
(Các giải pháp khác không hoạt động trên thiết bị của tôi, đã bị ghi đè trong quá trình xây dựng hoặc bị lỗi khấu hao trong quá trình xây dựng.)
trong tệp kê khai mà bạn muốn sử dụng trong "chân dung", bạn phải viết các mã này vào thẻ Hoạt động
android:screenOrientation="portrait"
như thế này
android:icon="@drawable/icon"
android:name="com.zemkoapps.hd.wallpaper.AndroidGridLayoutActivity"
android:screenOrientation="portrait" >
Nhưng nếu bạn muốn màn hình trong phong cảnh, hãy sử dụng mã như thế này
android:screenOrientation="landscape"
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//setting screen orientation locked so it will be acting as potrait
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED);
}
Nếu bất cứ ai thắc mắc, làm thế nào bạn có thể làm điều này cho toàn bộ ứng dụng của mình mà không phải thực hiện tất cả các hoạt động của mình mở rộng một lớp cơ sở chung trong Kotlin , xem ví dụ bên dưới:
class InteractiveStoryApplication: Application() {
override fun onCreate() {
super.onCreate()
registerActivityLifecycleCallbacks(object: ActivityLifecycleCallbacks {
override fun onActivityCreated(activity: Activity?, savedInstanceState: Bundle?) {
activity?.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
}
override fun onActivityPaused(activity: Activity?) {
}
override fun onActivityResumed(activity: Activity?) {
}
override fun onActivityDestroyed(activity: Activity?) {
}
override fun onActivitySaveInstanceState(activity: Activity?, outState: Bundle?) {
}
override fun onActivityStarted(activity: Activity?) {
}
override fun onActivityStopped(activity: Activity?) {
}
})
}
}
và sau đó bạn phải thêm lớp cơ sở chung của mình trong AndroidManifest như vậy:
<application android:allowBackup="true"
android:name=".InteractiveStoryApplication"
Tương tự như câu trả lời của Graham Borland ... nhưng có vẻ như bạn không phải tạo lớp Ứng dụng nếu bạn không muốn ... chỉ cần tạo một Hoạt động cơ bản trong dự án của bạn
public class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_base);
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
Và mở rộng lớp này thay vì AppCompatActivity nơi bạn muốn sử dụng Chế độ Eo biển
public class your_activity extends BaseActivity {}
Dành cho người dùng Xamarin:
Nếu bạn mở rộng tất cả các hoạt động của mình thành BaseActivity
Chỉ cần thêm:
this.RequestedOrientation = ScreenOrientation.Portrait;
Điều này sẽ giải quyết vấn đề. Nếu bạn muốn bất kỳ hoạt động cụ thể nào được ghi đè lên cảnh này OnActivityCreated
. Như:
this.Activity.RequestedOrientation = ScreenOrientation.Landscape;
Trong bản kê khai của bạn loại này:
<activity
android:screenOrientation="portrait"
<!--- Rest of your application information ---!>
</activity>