可能重复:
不希望在旋转手机时销毁/创建活动
我正在尝试编写一个需要平滑方向传感器样本的程序,因为手机四处旋转.每次更改手机的方向时,它会中断数据并在布局更改时冻结程序.如何将其锁定在一个方向(横向或纵向,无关紧要)?
我认为它与android:layoutxml文件有关,但我在网上找不到任何东西.
我有以下问题.启动后,即使在更改屏幕方向后,应用程序也能正常工作.应用程序尚未准备好处理方向更改(例如,替代布局等),因此只显示旋转的默认布局并且没有问题.但是,当我通过按后退键离开应用程序时,更改方向并在再次启动应用程序后立即崩溃.崩溃后,如果我再次启动应用程序,它会很好地工作,直到前面描述的情况发生 - 然后它崩溃.
我已将设备连接到计算机并以调试模式运行应用程序.重新启动后,甚至在调用onCreate之前抛出异常.崩溃调用堆栈如下:
Thread [<1> main] (Suspended (exception IllegalArgumentException))
WindowManagerImpl.removeViewImmediate(View) line: 262
Window$LocalWindowManager.removeViewImmediate(View) line: 436
ActivityThread.handleDestroyActivity(IBinder, boolean, int, boolean) line: 4022
ActivityThread.handleRelaunchActivity(ActivityThread$ActivityRecord, int) line: 4127
ActivityThread.access$2400(ActivityThread, ActivityThread$ActivityRecord, int) line: 136
ActivityThread$H.handleMessage(Message) line: 2183
ActivityThread$H(Handler).dispatchMessage(Message) line: 99
Looper.loop() line: 143
ActivityThread.main(String[]) line: 5068
Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method]
Method.invoke(Object, Object...) line: 521
ZygoteInit$MethodAndArgsCaller.run() line: 858
ZygoteInit.main(String[]) line: 616
NativeStart.main(String[]) line: not available [native method]
Run Code Online (Sandbox Code Playgroud)
我计划稍后处理屏幕旋转,但在此之前,我希望默认行为正常工作.
我只覆盖了onCreate Activity的方法.我还有自定义应用程序类,它创建了一个应用程序范围的使用引擎类的实例:
public class ProCalcApplication extends Application
{ …Run Code Online (Sandbox Code Playgroud) 我为一个活动指定了两个单独的布局xml文件,一个用于res/layout文件夹中的Portrait,另一个用于res/layout-land文件夹中的Landscape.我的实际问题是,当我以纵向模式启动应用程序时,它需要ui从布局和即时我旋转我的手机它不需要从布局 - 土地文件夹中的xml它需要从布局文件夹ui,如果我在横向模式下启动我的应用程序它从layout-land文件夹中获取xml并立即将我旋转到肖像模式它从布局中获取xml-land ui不会更改为纵向ui.
可以任何伙伴告诉我什么是问题是有什么需要的PLZ帮助我解决这个问题.
提前致谢 .
this is my landscape ui xml
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/widget57"
android:layout_width="400dp"
android:layout_height="400dp"
android:layout_gravity="center|center_vertical"
android:layout_marginTop="30dp"
android:orientation="vertical" >
<TableRow
android:id="@+id/tableRow1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="40dp" >
<TextView
android:id="@+id/txtName"
android:layout_width="90dp"
android:text="@string/UserName" />
<EditText
android:id="@+id/edName"
android:imeOptions="actionNext|actionDone"
android:paddingRight="10dp"
android:singleLine="true"
android:width="240dp" />
</TableRow>
<TableRow
android:id="@+id/tableRow2"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/txtPass"
android:layout_width="90dp"
android:text="@string/PassWord" />
<EditText
android:id="@+id/edPass"
android:imeOptions="actionGo"
android:paddingRight="10dp"
android:password="true"
android:singleLine="true"
android:width="240dp" />
</TableRow>
<LinearLayout
android:id="@+id/widget57"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_gravity="center"
android:orientation="vertical" >
<Button
android:id="@+id/btnLogin"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="10dp"
android:text="@string/btn_GO"
android:textSize="19sp" >
</Button> …Run Code Online (Sandbox Code Playgroud) 我基于本教程实现了我的布局:http://android-developers.blogspot.hu/2011/02/android-30-fragments-api.html
不同之处是:
我的问题是,如果我已从左侧选择了某些内容然后将手机旋转为肖像,则最后一个选项菜单仍然存在且可见.
我认为问题来自最后一个活动的"细节"片段在方向改变后重新创建.为了测试它我创建了这两个方法:
@Override
public void onStart() {
super.onStart();
setHasOptionsMenu(true);
}
@Override
public void onStop() {
super.onStop();
setHasOptionsMenu(false);
}
Run Code Online (Sandbox Code Playgroud)
而且我正在显示正确的片段:
case R.id.prefs_medicines:
if (mDualPane) {
// Check what fragment is shown, replace if needed.
View prefsFrame = getActivity().findViewById(R.id.preferences);
if (prefsFrame != null) {
// Make new fragment to show this selection.
MedicineListF prefF = new MedicineListF();
// Execute a transaction, replacing any existing
// fragment with this one inside the frame.
FragmentTransaction ft = …Run Code Online (Sandbox Code Playgroud) 在Eclipse(ADT插件)中,有一个简洁的功能来以图形形式预览xml布局.我android:screenOrientation="landscape"为我设定了Activity,我认为它会以这种方式显示出来.但预览似乎仅限于纵向方向.有没有办法改变它?
我想只创建我的应用程序版本,所以我使用这里提供的方法:我想在android中的横向上创建我的应用程序
简而言之,我正在添加android:screenOrientation="landscape"到我的清单文件中.
它部分工作,但问题是它只允许用户在两个横向方向之一中使用应用程序.如何告诉应用程序允许使用任何横向方向?
(在Nexus 7 4.2上测试)
我有一个问题,我需要从数据库中显示数据,并以表格的形式在我的应用程序中查看它.一切顺利,但由于表格列很长(由于从数据库收到的数据),我决定将方向设置为横向以便于查看(我猜).实现此代码后,
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
Run Code Online (Sandbox Code Playgroud)
onCreate()函数被调用了两次.我知道它已被调用两次,因为我已经包含了log.i. 我的所有log.i都被调用了两次.我的日志应显示如下:
03-19 14:13:53.401: I/loop check(30510): loop
03-19 14:13:54.112: I/jObjLength(30510): 5
03-19 14:13:54.112: I/JSON(30510): jsonObj = work0
03-19 14:13:54.162: I/JSON(30510): jsonObj = work1
03-19 14:13:54.162: I/JSON(30510): jsonObj = work2
03-19 14:13:54.172: I/JSON(30510): jsonObj = work3
03-19 14:13:54.172: I/JSON(30510): jsonObj = work4
Run Code Online (Sandbox Code Playgroud)
但相反,它显示了这一点:
03-19 14:30:12.801: I/loop check(30510): loop
03-19 14:30:12.921: I/jObjLength(30510): 5
03-19 14:30:12.921: I/JSON(30510): jsonObj = work0
03-19 14:30:12.931: I/JSON(30510): jsonObj = work1
03-19 14:30:12.941: I/JSON(30510): jsonObj = work2
03-19 14:30:12.951: I/JSON(30510): jsonObj = work3
03-19 14:30:12.951: I/JSON(30510): …Run Code Online (Sandbox Code Playgroud) 我目前正在开发适用于iOS 7+和XCode 6的SpriteKit游戏.游戏应始终以纵向模式呈现.到目前为止,我已在视图控制器中实现了这些方法:
- (BOOL)shouldAutorotate {
return NO;
}
- (NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskPortrait;
}
Run Code Online (Sandbox Code Playgroud)
只要我启动应用程序将我的iPad保持在纵向模式,这样就可以正常工作.在游戏过程中它不会切换方向.
但是,在应用程序启动期间以横向方向按住iPad时,游戏会以横向显示.
即使在启动期间设备以横向模式保持,如何强制应用程序以纵向模式显示?
orientation screen-orientation uiinterfaceorientation ios sprite-kit
Delphi Android开发新手.如何检测屏幕方向是否已更改?即从肖像到风景,反之亦然?当发生这种情况时,如何触发代码?例如,我的图像大小为300x200,在纵向模式下,但当设备切换到横向时,我希望它调整并占据全屏宽度.
任何人都可以解释如何用Android Studio中的Kotlin替换现有的Java代码吗?