【问题标题】:How to stop changing the orientation when a progress bar is spinning in android当进度条在android中旋转时如何停止更改方向
【发布时间】:2011-12-06 16:09:10
【问题描述】:

我有一个注册屏幕,用户在其中输入所有注册详细信息,当用户单击“注册”按钮时,我显示进度条(进度条开始旋转),然后将用户带到主屏幕。如果当进度条旋转时,用户旋转手机,进度条被关闭。我希望方向不要从纵向变为横向,反之亦然,当进度条可见时(意味着它正在旋转)。如何停止方向变化进度条何时旋转?任何帮助将不胜感激。

【问题讨论】:

  • 我认为对于这个活动,你应该在你的清单文件中定义纵向模式 - android:screenOrientation=[""portrait"],所以只有这个活动你的屏幕方向不会改变。还指定
  • 我无法修复方向,因为它应该同时支持横向和纵向。我希望它仅在进度条可见时停止。
  • @androidGuy 你得到解决方案了吗?

标签: android progress-bar screen-orientation orientation-changes


【解决方案1】:

正如here 解释的那样,调用

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);

然后

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);

真的很像魅力......在真实设备上!

在模拟器上测试时不要以为它坏了,ctrl+F11快捷键总是改变屏幕方向,而不模拟传感器移动。

其他一些参考资料:

  1. Programatically enabling/disabling screen rotations in Android
  2. Android child activity and orientation lock

这里是Activityinfo

********************** 已编辑 ******************************* ***

而且我认为您无法处理屏幕旋转的进度条。 我说的对吗?

所以你不需要停止旋转这个解决方案。您应该处理进度条。 这里有一些教程,对这个目的很有用..

  1. How to handle screen orientation change when progress dialog and background thread active?
  2. Handling progress dialogs and orientation changes
  3. Threads and Progress Dialogs in Android Screen Orientation Rotations
  4. Android Persistent ProgressDialog Done Right

****************** 已编辑 2 *****************

有时,当方向改变时,您会丢失数据。所以你可以试试这些教程

  1. Handling Runtime Changes
  2. Faster Screen Orientation Change
  3. Handling Orientation Change in Android

【讨论】:

    【解决方案2】:

    发生这种情况是因为当屏幕方向旋转时,Activity 会重新启动。在这种情况下,您可以在 AndroidManifest 文件的标记中添加configChanges 属性,以停止重新创建 Activity。

    <activity android:name=".Activity_name"
              android:configChanges="orientation|keyboardHidden">
    

    通过,您的方向可以随着进度条的工作而改变,并且即使方向改变也不会停止。

    更新

    @Override
        public void onConfigurationChanged(Configuration newConfig) {
            super.onConfigurationChanged(newConfig);
            if(newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE){
                setContentView(R.layout.login_landscape);
            }
            else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
                setContentView(R.layout.login);         
            }
        }
    

    【讨论】:

    • 如果我有 2 种 diff 布局用于 potrait 和 Landscape 模式,当方向改变时如何设置适当的布局。因为当我们将活动设置为 android:configChanges="orientation|keyboardHidden" 时,它赢了'不会在方向改变时自动改变布局。
    • 您可以将该横向 xml 文件放在 res/layout-land 文件夹中,然后它会在方向更改时自动设置该文件,无需为此编写任何代码来检测活动文件中的方向..
    • 在正常情况下,当方向改变时会自动设置文件,但是当我们将其设置为android:configChanges="orientation|keyboardHidden"时,它不会自动改变。
    • 是的,但我无法修复特定的方向。它应该支持纵向和横向。
    • @androidGuy 请到休闲聊天室,以便我们进一步讨论您的问题...我正在为您的问题尝试其他方法。
    【解决方案3】:

    在 Activity 类中使​​用 setRequestOrientation 方法。

    继承 ProgressDialog 类,重写方法。
    示例代码如下。

        class myDialog extends ProgressDialog
    {
        Activity mActivity;
        public myDialog(Activity context) {
            super(context);
            this.mActivity = context;
        }
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            mActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
        }
    
        @Override
        public void dismiss() {            
            super.dismiss();
            mActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
        }
    }
    

    【讨论】:

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