如何停止改变方向时,进度条旋转在android



我有一个注册屏幕,用户输入所有注册细节,当用户点击"注册"按钮时,我显示进度条(进度条开始旋转),然后将用户带到主屏幕。如果用户在进度条旋转时旋转手机,进度条就会消失。我希望方向不要从纵向到横向改变,反之亦然,当一个进度条是可见的(意味着它正在旋转)。如何停止方向变化时,进度条旋转?

这是因为当屏幕方向旋转时,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);         
        }
    }

正如这里所解释的,调用

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);

真的很有魅力…在真实设备上!

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

其他参考文献:

  1. 在Android中编程启用/禁用屏幕旋转
  2. Android child activity and orientation lock

这里是Activityinfo

***************** 编辑 ********************************

我认为你不能处理屏幕旋转上的进度条。我对吗?

所以对于这个解决方案,您不需要停止旋转。您应该处理进度条。这里有一些教程,对这个目的很有用。
  1. 如何处理屏幕方向改变时,进度对话框和后台线程活动?
  2. 处理进度对话框和方向变化
  3. Android屏幕方向旋转中的线程和进度对话框
  4. Android Persistent ProgressDialog Done Right

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

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

  1. 处理运行时更改
  2. 快速改变屏幕方向
  3. 处理Android方向变化

在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);
    }
}

最新更新