I have a simple Activity
called SingleTouchTest
to make sense of screen touches. What is strange is that SingleTouchTest
starts in whatever orientation I'm in but rotating the device does not result in screen rotation.
My test device is an Acer A100 running Android 4.0.3.
The main Activity
contains a ListView
that navigates to my test Activity
es, including SingleTouchTest
. I can run SingleTouchTest
(full code below) without problems except rotation. In AndroidManifest.xml
(full code below) I have tried every combination of
android:configChanges="keyboard|keyboardHidden|orientation"
android:screenOrientation="unspecified"
and it does not auto rotate. I even removed the onConfigurationChanged()
method from SingleTouchTest
and nothing happens.
Full code of AndroidManifest.xml
:
<?xml version="1.0" encoding="utf-8"?>
<manifest
package="com.Bespoke.AndroidBasics"
android:versionCode="1"
android:versionName="1.0"
android:installLocation="preferExternal" xmlns:android="http://schemas.android.com/apk/res/android">
<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="15" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<application
android:icon="@drawable/ic_launcher"
android:label="Android Basics">
<activity
android:name=".AndroidBasicsStarter"
android:label="Android Basics"
android:screenOrientation="unspecified">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".LifeCycleTest"
android:label="Life Cycle Test"
android:configChanges="keyboard|keyboardHidden|orientation" android:screenOrientation="unspecified"/>
<activity
android:name=".SingleTouchTest"
android:label="Single Touch Test"
android:configChanges="keyboard|keyboardHidden|orientation" android:screenOrientation="unspecified"/>
<activity
android:name=".MultiTouchTest"
android:label="Single Touch Test"
android:configChanges="keyboard|keyboardHidden|orientation" android:screenOrientation="unspecified"/>
<activity
android:name=".KeyTest"
android:label="Key Test" android:screenOrientation="unspecified"/>
</application>
</manifest>
Full code of SingleTouchTest
:
package com.Bespoke.AndroidBasics;
import android.app.Activity;
import android.content.res.Configuration;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.TextView;
public class SingleTouchTest extends Activity
implements OnTouchListener {
StringBuilder builder = new StringBuilder();
TextView textView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
textView = new TextView(this);
textView.setText("Touch and drag (one finger only!)");
textView.setOnTouchListener(this);
this.setContentView(textView);
}
public boolean onTouch(View v, MotionEvent event) {
builder.setLength(0); // clear the builder
switch(event.getAction()) {
case MotionEvent.ACTION_DOWN:
builder.append("down, ");
break;
case MotionEvent.ACTION_MOVE:
builder.append("move, ");
break;
case MotionEvent.ACTION_CANCEL:
builder.append("cancel, ");
break;
case MotionEvent.ACTION_UP:
builder.append("up, ");
break;
}
builder.append(event.getX());
builder.append(", ");
builder.append(event.getY());
String text = builder.toString();
Log.d("TouchTest", text);
textView.setText(text);
return true; // Consume the event, if false super.onTouch superceeds us
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
}
}
since you are using
android:screenOrientation="unspecified"
for each activity and it is defined according to google as
The default value. The system chooses the orientation. The policy it uses, and therefore the choices made in specific contexts, may differ from device to device.
Which makes me think that the device is declaring the desired orientation for some reason. Maybe try switching the screenorientation to
android:screenOrientation="fullSensor"
that should take it out of the specific devices hands.