该[[UIDevice currentDevice] orientation]方法返回超出纵向和横向方向的多个方向.我很清楚检查返回的方向是否"有效",不幸的是,当我的应用程序需要特定的方向来确定运行哪些方法时返回的方向不是"有效",我无法知道哪种方法是适当.
我已经尝试了很多解决方案,但是现在我唯一能够解决的问题是检查方向是否正确LandscapeLeft或者LandscapeRight如果不是我认为屏幕是纵向的.不幸的是,当设备面朝上并且屏幕处于横向时,情况并非如此.
我试图使用父视图控制器的方向:
parentController.interfaceOrientation;
Run Code Online (Sandbox Code Playgroud)
不幸的是它返回UIDeviceOrientationUnknown.我搜索SO和谷歌搜索遇到此问题的其他人.看来愚蠢,我认为苹果将有什么,但LandscapeLeft/Right和PortraitUp/Down他们的方位.
我真正需要的是APPS方向而不是设备,因为这些有时是不一致的.有什么建议?
我正在开发一个针对2.x和3.0设备的Android应用程序,因此我正在使用compatiblebilty API.我在Android 2.0上测试.
我正在尝试将显示的片段替换为另一个片段(搜索结果与搜索结果一起),并且当显示第二个(结果)片段时,我遇到了方向更改的崩溃.
基本上,我有一个活动,包括在布局xml中定义的片段
<fragment class="org.prevoz.android.search.SearchFormFragment"
android:id = "@+id/search_form_fragment"
android:layout_width = "fill_parent"
android:layout_height = "fill_parent" />
Run Code Online (Sandbox Code Playgroud)
第一个片段(SearchFormFragment)显示为默认值.当用户点击"搜索"按钮时,我将SearchFormFragment替换为SearchResultsFragment,后者运行AsyncTask(这就是我想保留它的原因)
// Show the search results fragment
SearchResultsFragment newSearch = new SearchResultsFragment(from, to, when);
newSearch.setRetainInstance(true);
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out);
transaction.replace(R.id.search_form_fragment, newSearch);
transaction.addToBackStack(null);
transaction.commit();
Run Code Online (Sandbox Code Playgroud)
但是,当显示SearchFormFragment并更改方向时,我的应用程序崩溃了
ERROR/AndroidRuntime(334): FATAL EXCEPTION: main
ERROR/AndroidRuntime(334): java.lang.RuntimeException: Unable to start activity ComponentInfo{org.prevoz.android/org.prevoz.android.search.MainActivity}: android.view.InflateException: Binary XML file line #13: Error inflating class fragment
ERROR/AndroidRuntime(334): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
ERROR/AndroidRuntime(334): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
ERROR/AndroidRuntime(334): at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3815)
ERROR/AndroidRuntime(334): at android.app.ActivityThread.access$2400(ActivityThread.java:125)
ERROR/AndroidRuntime(334): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2037)
ERROR/AndroidRuntime(334): …Run Code Online (Sandbox Code Playgroud) android backwards-compatibility screen-orientation android-2.2-froyo
如何将Phonegap应用程序配置为仅限于纵向模式,我有可能使用CSS或JavaScript来做到这一点,以便我能够在整个平台上获得一致的行为
我发现这个有用的后期检测 - 显示 - 定位 - 改变 - 移动设备 - 加速度计 - 平台 - 独立 - 方法
这里解释了如何检测方向,但我需要对其进行配置
是否可以通过CSS3媒体查询?
我一直在以纵向模式编写我的Universal应用程序,现在在大约15个nib文件,许多viewCotnrollers之后,我想实现shouldAutorotateToInterfaceOrientation并在Landscape模式下设计一些屏幕.
添加:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return YES;
}
Run Code Online (Sandbox Code Playgroud)
对我的所有viewControllers,都不做这项工作.
在调试期间,我看到这个方法被调用,但它不起作用!不在模拟器中,不在设备中,不在Iphone中,不在Ipad中!
我在论坛中搜索了一些答案,并看到了一些建议:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return (interfaceOrientation == UIInterfaceOrientationPortrait ||
interfaceOrientation == UIInterfaceOrientationLandscapeLeft ||
interfaceOrientation == UIInterfaceOrientationLandscapeRight ||
interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown );
}
Run Code Online (Sandbox Code Playgroud)
也没用,
添加:
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
Run Code Online (Sandbox Code Playgroud)
和
[[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications];
Run Code Online (Sandbox Code Playgroud)
到我的viewDidLoad和viewDidUnload也分别没用.
我迷路了...任何帮助都会做!
还有一个信息...我的所有视图都是UIControl类型,因为我需要TuchUpInside才能工作.
赞赏你的帮助.
我正在写一个显示倒数计时器的小工具.我让小部件按照我想要的方式工作,直到我将手机从横向翻转到肖像.我的小部件不会更新并在小部件启动时进入初始状态,直到我的定期警报调用onupdate.一旦方向改变以更新我的小部件,我想手动调用onupdate我已经研究了一段时间了,我发现我需要使用一个服务来监控方向变化并调用我的onupdate我的小部件.
我的问题是我无法找到关于如何使用服务来监控变化的直接答案.我已经看到,通过一个活动我可以将 android:configChanges ="orientation | keyboardHidden"添加到活动的清单并使用onConfigurationChanged,但是我可以为服务执行此操作.如果是这样的话?是否有更好的方法来监控方向变化?我还在互联网上看到,服务也不是最好的方法.
我已经看过用于创建方向监听器的教程,但它们似乎使用折旧函数调用.
提前致谢
我有一个不会在方向更改后重新创建的活动.我在清单中的活动声明中添加了以下内容:
android:configChanges="orientation"
Run Code Online (Sandbox Code Playgroud)
在Android 2.3上,这非常有效.在更改方向时,无论如何都会调用HONEYCOMB_MR2 onCreate.
是否还需要在HONEYCOMB_MR2上执行其他操作以防止在方向更改后重新创建活动?
android screen-orientation android-configchanges android-3.0-honeycomb
API演示 - >图形 - > 指南针
它只能正常工作,直到您不更改设备的自然方向.在大多数手机中,肖像和大多数10英寸平板电脑是风景.如果你改变而不是需要旋转90度.我想看看该系统的3D修复.
100%肯定需要使用remapCoordinateSystem()方法.
我想看看如何(代码)如果我能看到如何计算那些轴映射(理论数学)的解释它会很好.
我试着理解,但我忘记了所有的线性代数.
这里说明为什么我们必须使用,但不告诉如何!
float R[] = new float[9];
// X (product of Y and Z) and roughly points East
// Y: points to Magnetic NORTH and tangential to ground
// Z: points to SKY and perpendicular to ground
float I[] = new float[9];
boolean success = SensorManager.getRotationMatrix(R, I, mGravity, mGeomagnetic);
Run Code Online (Sandbox Code Playgroud)
似乎那些坐标是这个位置: - 设备在表格中说(x,y轴在桌子上)

只有,如果
getWindowManager().getDefaultDisplay().getRotation() == Surface.ROTATION_0
Run Code Online (Sandbox Code Playgroud)
问题是如何完成此代码: - 那些案例分支
switch (mScreenRotation) {
case Surface.ROTATION_0:
Log.v("SurfaceRemap", "0 degree");
axisX …Run Code Online (Sandbox Code Playgroud) 起初我认为这是我的应用程序的一个问题,但它似乎发生在姜饼模拟器中的任何应用程序(虽然有趣的是,不是主屏幕).
要复制我的问题,打开eclipse并启动用于姜饼的android模拟器(我使用"Google API - API Level 9"作为我的目标)
因此,模拟器加载后复制的过程是
按LCtrl-F11将方向切换到横向,然后再切换到纵向
结果:
在主屏幕中:
视图按预期旋转为横向,然后返回到纵向
在任何应用程序(我已经尝试过浏览器,计算器,地图和我正在处理的应用程序):
视图旋转到横向,然后什么都没有,即使模拟器以横向模式显示手机,它也会保持在横向状态(见下文)

有没有其他人有这个问题,或者我以某种不正确的方式安装了模拟器 - 这对任何以前的模拟器都不是问题
如何在用户更改方向时,如何避免在活动中使用asynctask类重新加载活动?谁能举个例子?
Camera.setDisplayOrientation 的文档页面包含以下代码示例,声明使用它将"使摄像机图像以与显示相同的方向显示":
public static void setCameraDisplayOrientation(Activity activity,
int cameraId, android.hardware.Camera camera) {
android.hardware.Camera.CameraInfo info =
new android.hardware.Camera.CameraInfo();
android.hardware.Camera.getCameraInfo(cameraId, info);
int rotation = activity.getWindowManager().getDefaultDisplay()
.getRotation();
int degrees = 0;
switch (rotation) {
case Surface.ROTATION_0: degrees = 0; break;
case Surface.ROTATION_90: degrees = 90; break;
case Surface.ROTATION_180: degrees = 180; break;
case Surface.ROTATION_270: degrees = 270; break;
}
int result;
if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
result = (info.orientation + degrees) % 360;
result = (360 - result) % 360; // …Run Code Online (Sandbox Code Playgroud)