Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android屏幕方向:仅锁定部分布局_Android_Android Layout - Fatal编程技术网

android屏幕方向:仅锁定部分布局

android屏幕方向:仅锁定部分布局,android,android-layout,Android,Android Layout,我正在建立一个相机应用程序,利用相机预览。为了使用全屏预览,我将活动锁定为 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 现在我有以下问题:每当我渲染一个窗体或我必须显示一个对话框时,它总是以横向模式显示,即使用户在纵向模式下使用他/她的设备也是如此。 我尝试使用变换动画旋转edittext视图,它们已正确旋转,但仍然无法再聚焦它们,并且键盘也始终显示在横向中:( 你知道有什么办法能在这附近找到路吗 重要

我正在建立一个相机应用程序,利用相机预览。为了使用全屏预览,我将活动锁定为

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
现在我有以下问题:每当我渲染一个窗体或我必须显示一个对话框时,它总是以横向模式显示,即使用户在纵向模式下使用他/她的设备也是如此。 我尝试使用变换动画旋转edittext视图,它们已正确旋转,但仍然无法再聚焦它们,并且键盘也始终显示在横向中:(

你知道有什么办法能在这附近找到路吗

重要提示:检测方向不是这里的问题。问题是:如何旋转窗体/视图/视图组和键盘,使它们仍然可用。

我知道这一定是有可能的:三星的摄像头应用程序(galaxy S3附带)能够在不旋转预览的情况下旋转视图,所以这一定是有可能的! 见:


您必须通过旋转设备来覆盖活动的行为,您必须在mafinest中添加方向更改,然后添加此事件的侦听器并手动旋转视图

如果使用此方法,所有对话框等(系统视图)将以正确的方式显示

选中此项:

这是:
(我想是第二个答案)

通过设置此属性

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
您正在将屏幕锁定为仅横向,之后即使用户将设备保持在纵向模式,它也不会旋转到纵向模式。根据我对您问题的理解,您可以做一件事

android:configChanges="orientation"
在menifest文件中,将上述属性添加到您的Activity中。在Activity类中,重写onConfigurationChange方法,您可以根据需要处理方向更改,而不是将Activity锁定到横向


如果我正确理解了您的问题,那么它可能会帮助您。

您最好尝试使用另一个活动作为对话框,在menifest中设置其属性(方向和主题)并使用它。

在清单文件中为您的相机预览活动提供以下属性
android:configChanges=“keyboardHidden | orientation”
了解更多信息


我希望这能帮助你解决你的问题。

afaik:旋转是通过捕捉定向事件来实现的
android:configChanges="orientation"
并根据这个方向用新的布局给屏幕充气

  • 在风景中膨胀
  • 旋转发生
  • 为要更换的屏幕部件充气 i、 例如,我们使用纵向按钮而不是横向按钮的新布局来膨胀按钮的支架视图
  • 必须将布局切割为在运行时添加在一起的部分


    实现这一点的另一种方法是使用曲面视图进行相机预览,并使用另一种布局来固定曲面,并使用

    将其添加到曲面顶部。三星相机应用程序正在使用带有方向传感器的方向更改侦听器。如果用户阻止设备旋转设置,则旋转仍会发生n

    您将需要一个完整的自定义窗口小部件,所以您不能使用内置对话框,您必须显示一个自定义对话框

    基本思想是使用OrientationEventListener和SensorManager。在设备旋转时,您必须更新UI并使用新方向旋转视图。以下是使用OrientationEventListener的教程 在大多数摄像头应用程序中,活动仍被横向屏蔽。
    所有摄像头应用程序都会使用此技巧来简化对SurfaceView大小随旋转而变化的处理。

    不明白。您所说的“您必须通过旋转设备来覆盖活动的行为”是什么意思?如果您在清单中说您将处理配置更改:定向-您将能够覆盖onConfigurationChanged(配置)或类似的东西,在这种方法中,您只能手动旋转必要的Arry视图,但正如我之前所写的,以编程方式旋转编辑文本或键盘不起作用。您知道怎么做吗?您是否尝试过以对话框的形式启动新活动(使用android:theme=“@android:style/theme.dialog”在活动描述中)而不是使用实际的对话框?我怀疑这个假对话框应该以通常的方式对方向变化作出反应,因为您只锁定了横向方向的相机活动。不幸的是,我目前无法亲自尝试。没有,还没有尝试。如果这样做会很好…不起作用-只是尝试一下:对话框活动是也以横向显示,无论我如何旋转设备如何显示相机预览?也许你不应该锁定方向,而是应该找到一种方法,在应用程序的其余部分可以移动时始终使用全屏进行预览…?也考虑过了。我正在使用SurfaceHolder来附加预览:mSurfaceView=new SurfaceView(context);addView(mSurfaceView);mSurfaceView.getHolder().addCallback(this);然后,在surfaceCreated()回调中:camera.setPreviewDisplay(holder);我知道我可以做到这一点。但是,正如我已经写的,我没有设法呈现旋转的edittext表单(或按钮)它仍在工作,键盘总是以横向模式显示。酷-不知道可以旋转祝酒词。但是,我仍然不知道如何旋转表单元素,当屏幕方向改变时,Roid会处理这个问题。每当屏幕方向改变时,它都会调用
    onConfiguration Changed
    。不,它不负责旋转,因为我调用setRequestedOrientation(ActivityInfo.SCREEN\u ORIENTATION\u横向);为了将相机预览锁定为横向->android将锁定整个活动是的,你是对的,它不会被称为“因为你已经要求了方向。可能会帮助你。这对我有什么帮助?你能详细说明一下吗?正如前面所说:我知道如何捕捉方向,我知道
    @Override
     public void onConfigurationChanged(Configuration newConfig) {
         super.onConfigurationChanged(newConfig);
    
         // Checks the orientation of the screen
         if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
             Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
             setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
            //Your code to do the other things in landscape mode...
    
         } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
             Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
             setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
           //Your code to do the other things in portrait mode...
    
         }
     }