5

画面のタッチを理解するための簡単なActivity呼び出しがあります。SingleTouchTest奇妙なのは、SingleTouchTest私がいる向きに関係なく起動しますが、デバイスを回転させても画面が回転しないことです。

私のテスト デバイスは、Android 4.0.3 を実行している Acer A100 です。

mainには、 を含む、私のテストes に移動するActivityが含まれています。回転以外は問題なく実行できます(以下の完全なコード)。(以下の完全なコード)では、すべての組み合わせを試しましたListViewActivitySingleTouchTestSingleTouchTestAndroidManifest.xml

android:configChanges="keyboard|keyboardHidden|orientation" android:screenOrientation="unspecified"

そして自動回転しません。onConfigurationChanged()メソッドを削除してSingleTouchTestも何も起こりません。

の完全なコード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>

の完全なコード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);

     }

}
4

3 に答える 3

8

あなたが使用しているので

 android:screenOrientation="unspecified"

アクティビティごとに、グーグルによれば次のように定義されています

デフォルト値。システムが方向を選択します。使用するポリシー、したがって特定のコンテキストで行われる選択は、デバイスごとに異なる場合があります。

これは、デバイスが何らかの理由で目的の向きを宣言していると思わせます。たぶん、画面の向きをに切り替えてみてください

android:screenOrientation="fullSensor"

特定のデバイスの手からそれを取り除く必要があります。

于 2012-06-11T09:22:59.553 に答える
2

AndroidManifest で、 を削除します|orientation。この理由は次のとおりです。

android:configChanges特定の構成変更を手動で処理できます。アプリに ( 内のコードを介してonConfigurationChanged()) 手動で回転するように指示していないため、何も実行していません。アプリケーションが回転を自動的に使用できるようにするには、向きを手動で処理してい ないことをマニフェストに伝える必要があります。

これを説明するドキュメントは、Android Developers Site にあります

于 2012-06-11T09:11:00.867 に答える
2

これを試して:

android:screenOrientation="fullSensor"

向きは、デバイスの向きセンサーによって決定されます。ディスプレイの向きは、ユーザーがデバイスをどのように持っているかによって異なります。これはあなたが望むものでなければなりません。また、その他のオプションについては、このリンクをチェックしてください - Activity Element.

于 2012-06-11T03:05:32.443 に答える