强制"纵向"方向模式

tho*_*aus 285 android landscape portrait screen orientation

我正在尝试为我的应用程序强制"纵向"模式,因为我的应用程序绝对不是为"横向"模式设计的.

在阅读了一些论坛后,我在清单文件中添加了这些行:

<application 
  android:debuggable="true"
  android:icon="@drawable/icon" 
  android:label="@string/app_name"
  android:screenOrientation="portrait">
Run Code Online (Sandbox Code Playgroud)

但它不适用于我的设备(HTC Desire).它从"纵向"lo"横向"切换,忽略清单文件中的行.

在更多论坛阅读之后,我尝试在我的清单文件中添加它:

<application 
  android:debuggable="true"
  android:icon="@drawable/icon" 
  android:label="@string/app_name"
  android:configChanges="orientation"       
  android:screenOrientation="portrait">
Run Code Online (Sandbox Code Playgroud)

这个函数在我的activity类中:

public void onConfigurationChanged(Configuration newConfig)
{
    super.onConfigurationChanged(newConfig);
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
Run Code Online (Sandbox Code Playgroud)

但同样,没有运气.

C0d*_*ack 515

不要将方向应用于应用程序元素,而应将属性应用于activity元素,并且还必须configChanges如下所述进行设置.

例:

<activity
   android:screenOrientation="portrait"
   android:configChanges="orientation|keyboardHidden">
</activity>
Run Code Online (Sandbox Code Playgroud)

这将应用于清单文件中AndroidManifest.xml.

  • @ Orchestrator,configChanges意味着配置更改由活动本身处理.没有它,如果方向发生变化,活动将重新启动.您可能会问,如果您已指定方向是"肖像",它将如何改变?如果您启动另一项改变方向的活动,则会更改,然后退出新活动,返回您的活动.例如,Samsung Galaxy S3上的默认图像捕获意图在某些方向上执行此操作. (66认同)
  • configChanges是什么用的? (23认同)
  • 为什么包含"keyboardHidden"? (8认同)
  • 当然,@ TusharPandey.如果我没记错的话,这个让我们感到悲伤的地方就是我们的活动在三星Galaxy S3上启动了默认的图像捕捉意图.基本上,我们只是想拍照并得到结果.然而,当相机意图返回时,它导致了一个方向改变,消除了我们活动中的状态,因为我们不相信我们需要保护它(因为我们的整个应用程序只是在"纵向"方向).Galaxy S3如何以及为什么这样做超出了我(理所当然有限)的理解. (3认同)
  • @GordonMcCreight,你能用一个真实的例子解释一下吗?"你可能会问,如果你已经指明方向是"肖像"它将如何改变?如果你发起另一个改变方向的活动,那么它会改变,那么新活动退出,让您回到活动中." (2认同)
  • @gonzobrains:"keyboardHidden" - 键盘可访问性已更改 - 例如,用户已显示硬件键盘."orientation" - 屏幕方向已更改 - 用户已旋转设备.有关详细信息,请访问http://developer.android.com/guide/topics/manifest/activity-element.html (2认同)
  • 根据最新的[指南](https://developer.android.com/guide/topics/resources/runtime-changes),还必须包括“screenSize”和“screenLayout”。_如果您想在应用程序中手动处理方向更改,则必须在 android:configChanges 属性中声明“orientation”、“screenSize”和“screenLayout”值。_ (2认同)

NUL*_*ter 22

注意

android:screenOrientation="portrait"     
android:configChanges="orientation|keyboardHidden"
Run Code Online (Sandbox Code Playgroud)

在清单文件中添加 - 定义活动的位置.


Pin*_*nki 12

我认为android:screenOrientation="portrait"可以用于个人活动.所以在<activity>标签中使用该属性,如:

<activity android:name=".<Activity Name>"
    android:label="@string/app_name" 
    android:screenOrientation="portrait">
   ...         
</activity>
Run Code Online (Sandbox Code Playgroud)


Mun*_*f M 10

如果您在我的应用程序中有很多活动,或者如果您不想为清单中的每个活动标记输入代码,则可以执行此操作.

在Application Base类中,您将获得生命周期回调

所以基本上当在应用程序类中创建on create时,每个活动发生的事情都是代码..

public class MyApplication extends Application{

@Override
    public void onCreate() {
        super.onCreate();  

  registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
            @Override
            public void onActivityCreated(Activity activity, Bundle bundle) {
                activity.setRequestedOrientation(
                        ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);


// for each activity this function is called and so it is set to portrait mode


            }

            @Override
            public void onActivityStarted(Activity activity) {

            }

            @Override
            public void onActivityResumed(Activity activity) {

            }

            @Override
            public void onActivityPaused(Activity activity) {

            }

            @Override
            public void onActivityStopped(Activity activity) {

            }

            @Override
            public void onActivitySaveInstanceState(Activity activity, Bundle bundle) {

            }

            @Override
            public void onActivityDestroyed(Activity activity) {

            }
        });
}
Run Code Online (Sandbox Code Playgroud)

我希望这有帮助.


Par*_*tel 8

设置强制纵向或横向模式,分别添加线条.

在线下导入:

import android.content.pm.ActivityInfo;
Run Code Online (Sandbox Code Playgroud)

在上面添加下面的行 setContentView(R.layout.activity_main);

对于肖像:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);//Set Portrait
Run Code Online (Sandbox Code Playgroud)

对于景观:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);//Set Landscape
Run Code Online (Sandbox Code Playgroud)

这肯定会奏效.