【问题标题】:Prevent layout change and still catch onConfigurationChanged防止布局更改并仍然捕获 onConfigurationChanged
【发布时间】:2017-07-01 20:59:00
【问题描述】:

我需要锁定一个片段的布局,以防止它在设备旋转到横向时旋转。

为此,我将其锁定在清单中:

android:screenOrientation="portrait

布局没有改变,但是当方向改变时我仍然需要做一些工作(旋转按钮)。以这种方式锁定它可以防止调用 onConfigurationChanged。

我所针对的行为与默认的相机应用完全一样。当您旋转设备时,布局保持不变,但只有按钮旋转。

有没有人可以做到这一点?

【问题讨论】:

    标签: android orientation


    【解决方案1】:

    如果您想以编程方式监听简单的屏幕方向变化并让您的应用程序对它们做出反应,您可以在 Activity 中使用the OrientationEventListener 类来执行此操作。

    在 Activity 中实现方向事件处理很简单。只需实例化一个OrientationEventListener 并提供它的实现。例如,以下名为 SimpleOrientationActivity 的 Activity 类将方向信息记录到 LogCat:

    public class SimpleOrientationActivity extends Activity {
        OrientationEventListener mOrientationListener;
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
    
            mOrientationListener = new OrientationEventListener(this,
                SensorManager.SENSOR_DELAY_NORMAL) {
    
                @Override
                public void onOrientationChanged(int orientation) {
                    Log.v(DEBUG_TAG,
                        "Orientation changed to " + orientation);
                }
            };
    
           if (mOrientationListener.canDetectOrientation() == true) {
               Log.v(DEBUG_TAG, "Can detect orientation");
               mOrientationListener.enable();
           }
           else {
               Log.v(DEBUG_TAG, "Cannot detect orientation");
               mOrientationListener.disable();
           }
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            mOrientationListener.disable();
        }
    }
    

    如需更多帮助,请参阅this

    this answer 也会有所帮助。

    【讨论】:

    • 我认为有一个内置的方法可以做到这一点,使用 screenOrientation 和 OnConfigurationChanged,但这会成功。谢谢:)
    【解决方案2】:

    您可以通过编程方式设置方向:

    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
    

    并使用以下方法检测代码中的方向变化:

     @Override
     public void onConfigurationChanged(Configuration newConfig) {
         super.onConfigurationChanged(newConfig);
         // Do something here...
     }
    

    【讨论】:

    • 正如我在原始帖子中指定的那样,以某种方式锁定屏幕将阻止调用 onConfigurationChanged。由于第一条指令,这个方法永远不会被调用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多