Articles of android orientation

为什么`android:screenOrientation =“背后”`在android 4.1.2中没有效果?

作为测试样本,应用程序有2个活动:MainActivity在按钮单击时启动SecondActivity。 它在Android 4.0.4上工作正常,但在Android 4.1.2上我遇到了意外行为。 系统设置中的AutoRotation已关闭(或打开 – 无关紧要,无论如何都会忽略“后面”选项)。 android:screenOrientation=”landscape”是为MainActivity设置的,而android:screenOrientation=”behind”是为SecondActivity设置的,这意味着SecondActivity也必须以横向方式启动。 适用于Android 4.0.4,但在Android 4.1.2上,SecondActivity以纵向方向开始。 AndroidManifest.xml中: SecondActivity.java: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); logOrientation(“onCreate”); } @Override protected void onDestroy() { super.onDestroy(); logOrientation(“onDestroy”); } @Override protected void onResume() { super.onResume(); logOrientation(“onResume”); } private void logOrientation(String prefix) { int requestedOrientation = this.getRequestedOrientation(); WindowManager lWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE); Configuration cfg […]

在方向更改中保留列表片段中的列表

我有一个使用片段的应用程序,所有这些都包含在一个活动中。 活动以包含按钮菜单的片段开始,所有这些按钮都会导致各种listfragments替换原始按钮/菜单片段。 我的问题是,在方向更改时,如果活动正在显示其中一个列表视图,它将消失并返回按钮菜单。 我理解为什么会发生这种情况……活动被破坏并重新创建,但不是如何解决它并通过方向更改维护列表视图/当前片段。 我在这里find了setRetainInstance和使用示例,但是我无法弄清楚如何将它应用于我的情况下使用按钮菜单或者我想要保留的片段可能是几个不同的片段之一。 下面是简化的代码,以显示主要活动和一个listfragments。 任何指向添加内容的指针都将非常感激,以便保留列表片段。 活动 public class Main extends FragmentActivity { private MainMenuFragment menu; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); menu = new MainMenuFragment(); getSupportFragmentManager().beginTransaction().replace(R.id.pane, menu).commit(); } } ListFragment public class ItemListFragment extends ListFragment { private TextView header; private TextView empty; private Button add; public static Cursor itemCursor; private GroceryDB […]

自动片段还原的工作原理

使用FragmentActivity它会自动恢复片段状态并重新创建所有片段。 我知道这主要是在onSaveInstanceState保存状态,然后在activity的onCreate恢复。 看一下代码,我看到所有片段都被重新创建(或者只有在retainInstance为真时才附加)并添加到FragmentManager但我不清楚它们以哪种方式添加到视图中,因为视图不是自动恢复。 我最初的问题是我得到了一些类似于其他问题的片段的重复。 我在onCreate上: Fragment f = fm.findFragmentByTag(tagName); if(f==null) { f = createFragment(); fm.beginTransaction().add(R.id.myContainer,f,tagName).commit(); } else { //Nothing it’s on the view } 现在它可以工作,但我仍然不完全理解它是如何工作的。 我的怀疑是: 在哪一刻以及片段如何附加到视图? 我已经尝试过片段恢复是在onCreate of FragmentActivity 。 但是如果我之后调用setContentView ,片段如何附加到视图? 我可以在不覆盖onSaveInstanceState情况下阻止片段重新创建吗? 因为由于具有不同数量的片段的不同方向布局,我的初衷是仅重新创建标记为保留的一个状态片段,而不恢复未标记为保留的其他视图片段。

Android – 在横向和纵向模式之间切换会使Intent失去价值

我正在使用Intents在我的Android应用程序中切换活动。 我将数据放入Intent以用于下一个活动。 当我在横向和纵向模式之间切换手机时,从意图传递的值将丢失,并且我得到NullPointerException。 有人可以告诉我什么可能是错的。 有很多代码可以完全发布。 但如果有人需要查看代码的特定部分,我可以在此处发布。 编辑 我解决了国家没有得救的问题。 但我面临的另一个问题是,在更改了方向后,屏幕上的所有按钮都不起作用。 按下按钮,我在LogCat中收到此警告 02-25 23:07:49.190: WARN/WindowManager(58): No window to dispatch pointer action 0 请帮忙。

Android中的旋转矢量传感器和方向传感器之间的概念差异是什么?

Android提供旋转矢量传感器和方向传感器。 我知道它们会返回不同的数据,因为对于矢量传感器,我们有角度的误差,在方向传感器中我们有角度。 但是概念上的区别是什么? 我从文档中无法理解。 哪一个提供了三维空间中设备的方向? 我很困惑!

允许一个片段中的旋转/横向

我的应用程序有一个Activity,其中包含一个带有四个片段的FragmentPagerAdapter(使用ViewPagerIndicator库)。 其中一个片段设计了单独的纵向和横向布局,其他三个不需要并且需要固定为纵向。 我的想法是在清单中设置android:configChanges=”orientation”并在所有片段的onResume()中调用getActivity().setRequestedScreenOrientation() ,在其中三个片段中锁定到SCREEN_ORIENTATION_PORTRAIT ,但在需要的片段中锁定到SCREEN_ORIENTATION_PORTRAIT允许旋转,但这不起作用。 该应用程序仍处于纵向模式。 有没有办法实现这个目标? 实际活动实际上并不需要旋转,如果无论如何都允许片段在没有活动的情况下改变方向,但我没有发现任何提及这是可能的。 如果活动旋转也同样可以,因为标签栏在横向时将被隐藏。

我怎么能用setRetainInstance(true)破坏碎片并将它们添加到backstack?

setRetainInstance上的文档说: 这只能用于不在后栈中的片段。 所以我开始玩它。 我有一个Activity添加第一个frag A FragmentManager fm = getSupportFragmentManager(); FragmentTransaction ft = fm.beginTransaction(); ft.replace(R.id.content, new PackageFragment()); ft.commit 然后从这个frag我运行一个父Activity的方法,它将frag B添加到backstack FragmentManager fm = getSupportFragmentManager(); FragmentTransaction ft = fm.beginTransaction(); ft.replace(R.id.content, new OrderFragment()); ft.addToBackStack(null); ft.commit(); 然后我从onCreate,onDestroy,onSaveInstanceState,onActivityCreated ……等创建log msg 我尝试了这个过程的两个版本。 在每个片段上旋转设备。 默认 一切都如预期。 onCreate,onDestroy on fragment fire setRetainInstance(真) 一切都如预期的那样? onCreate,onDestroy片段不要开火 当片段都在后台时,一切似乎都有效..所以为什么文档说我不应该使用它? 我可能遇到麻烦的情况是什么? 谢谢

screenOrientation portrait和userPortrait有什么不同?

我需要知道screen orientation userPortrait和portrait的真正区别。 何时使用什么? 当这个? android:screenOrientation="portrait" 当这个? android:screenOrientation="userPortrait"

如何保持在Android中运行时方向更改时popup窗口打开?

我创build了一个popup窗口,其中包含月视图来获取date。 当我改变方向时,由于Android重新加载一个活动,我popup的窗口就会消失。 即使在运行时改变方向,我如何打开它?

以编程方式禁用和启用Android中活动的方向更改

我有一个应用程序,使一些后台人员。 当后台工作正在运行一个进度的时候,如果设备在这段时间内被旋转了,那么活动就会“重置”,我想避免这种情况。 出于这个原因,我决定在这个过程中禁用定位。 我已经看到这个问题differends线程,但没有一个有效的解决scheme,至less在我的情况。 发布的解决scheme是关于修复活动方向,但是如果您使用以下操作,则必须处理REVERSE方向未返回的事实: getResources().getConfiguration().orientation 上面的函数返回SCREEN_ORIENTATION_PORTRAIT对于PORTRAIT和REVERSE_PORTRAIT情况(至less在我的testing中)。 所以最后我用旋转值来处理,所以我的代码“禁用旋转”是: int rotation = getWindowManager().getDefaultDisplay().getRotation(); switch(rotation) { case Surface.ROTATION_180: setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT); break; case Surface.ROTATION_270: setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE); break; case Surface.ROTATION_0: setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); break; case Surface.ROTATION_90: setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); break; } 再次允许方向: setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED); 这在Android 4.1.2的设备中是完美的,但是在Android 4.2.1的设备中,它并不像预期的那样工作。 我想在活动周期中pipe理轮换应该是一个常见问题,但是我一直没有find合适的解决scheme。 可能是我正在寻找错误的方向,所以任何帮助真的很受欢迎。 在此先感谢,伊万。