Articles of android orientation

防止在方向更改时重新启动活动

我是Android开发的新手。我有纵向和横向模式的单独屏幕。当我改变我的方向时,相应的屏幕被加载并且活动重新开始。 现在我不希望我的活动在我改变方向时重新启动,但是应该加载相应的屏幕(axml)。 我努力了 [Activity(Label =“MyActivity”,ConfigurationChanges = Android.Content.PM.ConfigChanges.Orientation)] 上面的行停止活动重新启动,但它加载相同的屏幕(axml)。 请建议。 谢谢

如何在单/双窗格布局中管理UI状态和后端堆栈

我无法解决如何在典型的列表细节设计模式中正确管理Fragment的问题。 我的布局工作正常,横向视图(双窗格)的结构如下: 像这样的纵向视图(单个窗格): 我还在res/values-w600dp/有一个refs.xml ,以确保根据设备的屏幕宽度加载适当的布局。 选择列表项时,横向视图应并排显示列表和详细信息,而纵向视图应仅显示全屏详细信息。 如果未选择任何内容,则横向视图应显示左侧的左侧和右侧的空白区域,而纵向视图应仅显示全屏列表。 但是,这是我遇到麻烦的地方: 我是否对列表+可选的详细信息布局使用“主” Activity ,为肖像,仅详细信息布局使用另一个“详细信息” Activity ? 这似乎是Fragments指南示例所做的。 我已经得到了这个普遍的工作,但是当方向改变时,我如何保持我的细节片段的状态? 考虑上面显示的相反情况 – 从纵向旋转到横向,同时细节可见意味着细节Activity需要finish()因此主Activity可以显示双窗格布局,但这也会破坏细节片段和它的savedInstanceState 。 如果用户在详细信息片段中的EditText字段中键入了信息,然后旋转设备,当我将其添加到主(双窗格) Activity时,如何保留详细信息片段的整个UI状态? 我是否只使用一个Activity并自己管理Fragment ? 这允许我在方向改变时保留细节UI的状态(因为Android会自动处理),但是当它返回到堆栈时会变得混乱。 考虑图像中的情况 – 当细节可见时应从横向旋转到纵向应显示单窗格显示详细信息,但如何正确管理后堆栈和ActionBar主页图标以显示列表单窗格? 旋转回到横向还需要撤消我之前执行的任何后向堆栈操作,因为两个片段将立即可见。 经过一番搜索后,我发现了两个类似的问题( 从双窗格切换到单窗格上的方向更改维护片段堆栈和保留活动之间的片段状态 ),但我的情况略有不同,因为我不是要尝试改进此function但是最好预先计划好。 我错过了什么? 当然Android可以同时管理后台堆栈(如多个Activity案例中) 和 UI状态(如单个Activity案例中),对吧?

Android中三星设备上的摄像头捕获方向

我正在创建一个相机应用程序。 捕获时的图像显示在网格视图中。 现在,代码在除三星设备之外的所有设备上都能正常工作。 我正面临着方向问题。 当我以纵向模式拍摄图像时,图像在网格视图中显示时会旋转。 我没有保留任何旋转代码。 其次,使用EXIF我在网格视图中获得了正确的图像,但是当设备方向改变时,图像再次以旋转的方式旋转。 附加图片: 对不起图像的分辨率。 请知道它们是否不正确。 将再次上传。 我知道SO上有很多这样的帮助。 但我想我被困在某个地方。 我指的是以下链接: http://blog.andolaso​​ft.com/2013/06/how-to-show-captured-images-dynamically-in-gridview-layout.html

android片段在方向更改时创建了两次

我有这个奇怪的问题,我的列表片段创建两次,一次是在父活动上调用super.oncreate时,一次是在同一父活动上调用setContentView时。 这是一个简单的应用程序,我使用不同的纵向和横向布局。 这是主要活动: private HeadlinesFragment headlines; @Override public void onCreate(Bundle savedInstanceState) { Log.w(“MainActivity”, “Before super.onCreate: ” + this.toString()); super.onCreate(savedInstanceState); Log.w(“MainActivity”, “Before setContentView: ” + this.toString()); setContentView(R.layout.news_articles); //check to see if its portrait if (findViewById(R.id.fragment_container) != null) { if(getSupportFragmentManager().findFragmentById(R.id.fragment_container) == null) { headlines = new HeadlinesFragment(); getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, headlines).commit(); } } } 这是layout-land文件夹中的news_articles: 这是布局文件夹中的news_articles(纵向方向) 这里是两次创建的headlinesfragment public class […]

Android方向更改调用onCreate

我创建了一个搜索屏幕,其中包含一个用于关键字,filter和搜索按钮的选项卡,以及三个用于不同types结果的可选选项卡(每个选项卡包含一个带有ArrayAdapter的ListView )。 启动活动时,如果已执行搜索,开发人员可以选择将结果作为额外的Parcelable[]传递。 在onCreate()方法中,我正在创建Parcelable[]传递的三个选项卡中的每一个。 当我从filter选项卡上的按钮调用搜索时,我清除选项卡并使用新结果重新创建它们,这非常有效。 问题是,当您旋转设备时,Android的自动方向切换支持似乎会重新创建整个活动,并调用onCreate() 。 这意味着我的搜索结果将重置为启动活动时传递的Parcelable[] 。 到目前为止,我唯一的解决方案是调用finish()然后调用startActivity()来基本上重新启动具有新结果的活动。 我确信必须有一个更简单的解决方案,而且我做了一些非常无趣的事情。 有一个更好的方法吗?

更改方向的单活动应用中的YouTubePlayerSupportFragment

我试图解决这个问题,通过互联网搜索,没有find真正的答案。 我正在开发一款需要YouTube播放器的应用。 此播放器是YouTubePlayerSupportFragment因为它位于支持片段中(因此它也是嵌套的)。 初始设置后,我意识到每当我旋转手机时,video就会停止播放,必须重新启动。 这显然不是我想要的。 然后我发现了一些SO答案( 像这样 ),人们说Activity需要处理配置更改,所以我在清单中的Activity中添加了android:configChanges=”keyboardHidden|orientation|screenSize” 。 这解决了这个问题,video现在即使在方向改变时也能继续播放,全屏旋转看起来并不难看。 很酷,我说,只是意识到这大大困扰了应用程序的其他部分,因为配置现在正在所有视图到位后更新。 这意味着如果我的手机处于纵向模式并且我将其旋转为横向,则正在使用的布局仍然是纵向布局。 我find了解决方案,建议在Activity的onConfigurationChanged(…)调用setContentView(…)并重新onConfigurationChanged(…)片段中的视图,但这似乎是一个相当麻烦的解决方案,因为它不仅仅是一个简单的内容设置我需要,片段需要保留(例如在RecyclerView滚动位置)。 内置的setRetainInstance(true)在这种情况下不起作用,因为视图将使用它重新创建,但是在调用onCreateView(…)时配置仍然是旧的。 如果我可以捕获configChanges事件,如果用户仅在该屏幕(片段)上但在其他任何地方保留Activity娱乐,那将是很好的。 不建议使用更多活动,由于UI / UX原因,我无法为此屏幕和应用程序的其余部分使用单独的活动。

如何在不重新创建布局的情况下旋转方向更改视图?

这个问题在此之前已被提出,但其答案是错误的。 我想在屏幕方向更改上旋转一些视图,但我想保持布局不变。 它们应根据当前方向旋转90度,180度,270度或360度( SCREEN_ORIENTATION_LANDSCAPE , SCREEN_ORIENTATION_PORTRAIT , SCREEN_ORIENTATION_REVERSE_LANDSCAPE , SCREEN_ORIENTATION_REVERSE_PORTRAIT )。 这就是我想要实现的目标: 我提到的链接中的答案表明我应该在layout-land创建一个新的不同布局。 显然,这不是我想要的。 我不想重新创建活动或更改布局方向。 我只想旋转一些视图,并保持其他视图在方向更改时保持不变。 旋转特定视图与更改或重新创建整个布局(方向更改)之间存在巨大差异。 使用此链接中的答案,我将能够使用此方法获取当前屏幕方向: public static int getScreenOrientation(Context context) { WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); int rotation = windowManager.getDefaultDisplay().getRotation(); DisplayMetrics dm = new DisplayMetrics(); windowManager.getDefaultDisplay().getMetrics(dm); int width = dm.widthPixels; int height = dm.heightPixels; int orientation; // if the device’s natural orientation […]

Android片段在方向更改时重新创建

我正在开发一个基本上有ActionBar的应用程序。 当我的应用程序启动时,Activity会创建片段并将它们附加到每个选项卡,因此当我切换时,我会得到不同的视图。 当我尝试旋转设备时出现问题。 经过一番努力,我注意到Android会自动重新创建以前添加的片段,如下所示: SummaryFragment.onCreate(Bundle) line: 79 FragmentManagerImpl.moveToState(Fragment, int, int, int) line: 795 FragmentManagerImpl.moveToState(int, int, int, boolean) line: 1032 FragmentManagerImpl.moveToState(int, boolean) line: 1014 FragmentManagerImpl.dispatchCreate() line: 1761 DashboardActivity(Activity).onCreate(Bundle) line: 864 … 然后像往常一样重新创建片段。 因此,我希望能够正常工作的“真实”片段和他们“隐藏”的Android创建的片段会让我的应用崩溃。 我怎样才能避免这种行为? 我已经尝试在SummaryFragment中调用setRetainInstance(false)。 谢谢

在两侧设置android的横向方向

我在2.2中的Android应用程序中工作,我想在landscape模式下设置我的应用程序。 为此,我在我的manifest添加了每个活动标签android:screenOrientation=”landscape” ,它运行正常。 但它只来自一方。 如果我再次颠倒设备,它将在landscape模式下适合相同的位置。 如何在设备的两侧都具有横向模式。 请帮帮我。 提前致谢。

最佳方式:在ScrollView中保存和恢复TextView位置

我想要的是,在设备更改方向时,屏幕中的顶线在纵向时仍然是横向屏幕上的顶行。 反之亦然。 由于纵向和横向之间的屏幕宽度可能不同,因此文本的线宽(也就是TextView和ScrollView的宽度)也会有所不同。 因此,在不同的屏幕配置(纵向与横向,大与小)中,换行将有所不同。 在不同的情况下,换行符将处于不同的位置。 有三种不太完美的解决方案供您参考。 还解释了它们的缺点。 首先,最基本的方法: (1)仅将y偏移存储在像素中 请查看: http : //eliasbland.wordpress.com/2011/07/28/how-to-save-the-position-of-a-scrollview-when-the-orientation-changes-in-android/ 为什么这不是那么完美: 在肖像中,线条被包裹。 Line_1_Word_A Line_1_Word_B Line_1_Word_C Line_1_Word_D Line_2_Word_A Line_2_Word_B Line_2_Word_C Line_2_Word_D Line_3_Word_A Line_3_Word_B Line_3_Word_C Line_3_Word_D 在横向,线条没有包裹。 Line_1_Word_A Line_1_Word_B Line_1_Word_C Line_1_Word_D Line_2_Word_A Line_2_Word_B Line_2_Word_C Line_2_Word_D Line_3_Word_A Line_3_Word_B Line_3_Word_C Line_3_Word_D 想象一下,在保存时在Portrait中读取Line_2_Word_A (在屏幕顶部)。 当更改为横向时,它将显示Line_3_Word_A (在屏幕顶部)。 (因为顶部有两行偏移的像素。) 然后我想出一个方法, (2)通过保存滚动百分比 @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); final […]