繁体   English   中英

处理屏幕方向 - Android

[英]Handling Screen Orientation - Android

我的应用程序的屏幕方向有问题。 我在 res/layout-lan 文件夹中为横向模式创建了一个备用布局。 方向改变时出现的问题,

1.在不破坏旧活动的情况下重新创建活动。

2.因为我在我的应用程序中使用媒体播放器,在屏幕旋转时 .mp3 同时在两个方向上播放..

我无法找到通过保存和恢复活动状态来处理屏幕方向的正确示例代码......................

1.在不破坏旧活动的情况下重新创建活动。

Activity的重新创建是发生配置更改时 Android 的自然默认行为。 您的旧 Activity 留在内存中的可能原因是它引用了MediaPlayer的当前播放实例。

因为你对横向和纵向使用不同的布局资源,让 Android 重新创建 Activity 并每次拉取适当的资源对你有利。 如果您自己处理旋转,您也将负责重新加载正确的布局。

2.因为我在我的应用程序中使用媒体播放器,在屏幕旋转时 .mp3 同时在两个方向上播放..

这个问题有两种解决方案...

理想的解决方案是将您的媒体播放移动到Service Activity可以调用Service来启动/停止/等。 在用户指导时播放,但是将其放入像Service这样的后台组件中,即使您的Activity由于更改而不断变化,它也可以连续运行。 这是 Android 团队鼓励的设计模式,您的Activity实际上只处理用户界面。

另一个可行的解决方案是使用onRetainNonConfigurationInstance()MediaPlayer从旧Activity传递到新Activity 这允许单个MediaPlayer存在于Activity实例之间,保持播放一致。 例如:

public class MyActivity extends Activity {
    private MediaPlayer mPlayer;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //Check if we have a player passed in from the last instance
        mPlayer = (MediaPlayer)getLastNonConfigurationInstance();
        //If not, make a new one
        if (mPlayer == null) {
            mPlayer = new MediaPlayer();
           //...Set up new player instance...
        }
    }

    @Override
    public Object onRetainNonConfigurationInstance() {
        //Clear our member variable to guarantee this Activity
        // is allowed to GC after onDestroy()
        MediaPlayer instance = mPlayer;
        mPlayer = null;
        //Hand our current player up to the next Activity to be created
        return instance;
    }

}

确保最佳内存清理的另一个选项是将mPlayer定义为WeakReference<MediaPlayer>以允许 GC 声明旧的Activity ,即使MediaPlayer在配置更改时正在播放音频。

当屏幕方向通过以下步骤改变时,您可以停止重新创建活动。

设置 configChanges 标签如下

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

使用下面的方法。

@Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
   // to do on orientation changed          
    }
    }
                       v 

创建文件夹res/layout-land

而不是 res/layout- lan <---- 将d放在文件夹名称中

//by changing the orientation if your layout not disturb in design just data 

//销毁 //然后在您想要执行的活动的清单中使用以下属性

  android:configChanges="orientation|screenSize|layoutDirection"

//but your whole screen design disturb then turn off orientation by using this

 android:screenOrientation="portrait"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM