14

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

4

3 回答 3

14

发生这种情况是因为当屏幕方向旋转时,Activity 会重新启动。在这种情况下,您可以configChanges在 AndroidManifest 文件的标签中添加属性以停止重新创建 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);         
        }
    }
于 2011-10-13T05:11:47.403 回答
9

正如 这里所解释的,调用

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);

接着

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);

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

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

其他一些参考资料:

  1. 在 Android 中以编程方式启用/禁用屏幕旋转
  2. Android 儿童活动和方向锁定

这是活动信息

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

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

因此,您无需为此解决方案停止旋转。您应该处理进度条。这里有一些教程,对于这个目的很有用..

  1. 进度对话框和后台线程处于活动状态时如何处理屏幕方向更改?
  2. 处理进度对话框和方向更改
  3. Android 屏幕方向旋转中的线程和进度对话框
  4. Android Persistent ProgressDialog 正确完成

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

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

  1. 处理运行时更改
  2. 更快的屏幕方向更改
  3. 处理Android中的方向变化
于 2011-10-13T05:53:16.847 回答
2

在 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);
    }
}
于 2011-10-13T06:31:47.347 回答