【问题标题】:How can I prevent Android Activity from entering portrait mode breifly when I have specified landscape?当我指定横向时,如何防止Android Activity 进入纵向模式?
【发布时间】:2016-05-03 12:31:12
【问题描述】:

我已在清单文件中将默认活动设置为横向。我还尝试使用横向设置 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

但活动仍以纵向模式运行几秒钟,然后自动转换为横向。

我想直接以横向模式加载它,而无需短暂运行纵向模式。

我也参考了这个链接。

How can I prevent Android Activity from briefly entering portrait mode when I have specified landscape?

这是清单文件活动部分。

    <activity
        android:name=".Launcher"
        android:clearTaskOnLaunch="true"
        android:launchMode="singleTask"
        android:screenOrientation="landscape"
        android:stateNotNeeded="true"
        android:theme="@style/Theme"
        android:windowSoftInputMode="adjustPan">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.HOME" />
            <category android:name="android.intent.category.DEFAULT"/>
            <category android:name="android.intent.category.MONKEY" />
        </intent-filter>
    </activity>

【问题讨论】:

  • 你能发布你的清单吗?
  • 我已添加清单文件

标签: android


【解决方案1】:

解决方法

创建一个新的透明activity。还为此 activity 请求 landscape。一旦您注册此activity 已更改为landscape,就开始您真正的activity。现在你总是必须开始这个新的activity,而不是真正的activity

注意:未经测试

【讨论】:

  • 感谢您的回复。我会调查的。
【解决方案2】:

在声明 screenOrientation 后尝试添加 configChanges。

android:screenOrientation="风景"

android:configChanges="orientation|screenSize"

【讨论】:

    【解决方案3】:

    尝试在清单中的应用程序上添加android:screenOrientation="landscape"

    【讨论】:

      【解决方案4】:

      这很难实现,因为您的启动器始终以纵向模式运行,而您正在以横向模式启动 Activity。

      因此,如“F43nd1r”所述,需要实现此解决方法。但还需要做更多的事情。试试这个..

      您需要一个纵向模式下的虚拟活动,这将是您的启动器活动,并将采用“NoActionBar.Fullscreen”模式。

      public class DummyActivity extends Activity{
      
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setRotationAnimation();
          ImageView imageView = new ImageView(this);
          imageView.setImageResource(android.R.color.white);
      
          setContentView(imageView);
      
          new Handler().postDelayed(new Runnable() {
              @Override
              public void run() {
                  startActivity(new Intent(DummyActivity.this, YourActivity.class));
                  finish();
              }
          },500);
      }
      
      private void setRotationAnimation() {
          int rotationAnimation = WindowManager.LayoutParams.ROTATION_ANIMATION_CROSSFADE;
          Window win = getWindow();
          WindowManager.LayoutParams winParams = win.getAttributes();
          winParams.rotationAnimation = rotationAnimation;
          win.setAttributes(winParams);
      }
      }
      

      YourActivity 还应该具有并从 oncreate() 调用 setRotationAnimation() 方法..

      public class YourActivity extends Activity {
      
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setRotationAnimation();
          setContentView(R.layout.your_layout);
      }
      
      private void setRotationAnimation() {
          int rotationAnimation = WindowManager.LayoutParams.ROTATION_ANIMATION_CROSSFADE;
          Window win = getWindow();
          WindowManager.LayoutParams winParams = win.getAttributes();
          winParams.rotationAnimation = rotationAnimation;
          win.setAttributes(winParams);
      }
      
      }
      

      现在最重要的是清单中的主题。它应该看起来像..

          <activity
              android:name=".DummyActivity"
              android:label="@string/app_name"
              android:configChanges="orientation"
              android:screenOrientation="portrait"
              android:theme="@android:style/Theme.Holo.Light.NoActionBar.Fullscreen">
              <intent-filter>
                  <action android:name="android.intent.action.MAIN" />
      
                  <category android:name="android.intent.category.LAUNCHER" />
              </intent-filter>
          </activity>
          <activity
              android:name=".YourActivity"
              android:label="@string/app_name"
              android:configChanges="orientation"
              android:screenOrientation="landscape"
              android:theme="@android:style/Theme.Holo.Light">
          </activity>
      

      注意:1>这只是为了启动应用程序。当您按下返回按钮并退出应用程序时,将显示动画。

      2> 在 DummyActivity 中,可以根据您的要求减少 500 毫秒,具体取决于您的设备性能。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多