どうしを無効に配向変化のスケーラビリティの問題ですね。
-
19-09-2019 - |
質問
しているアプリケーションから利用縦画面モードで定義 android:screenOrientation="肖像"に、マニフェスト形式をサポートしています。この作品もOKに HTCマジック 電話を防ぐ方向の変更その他の携帯電話など)がありました。
しかし問題に HTC G1 電話としてオープンしたハードウェア QWERTYキーボード な仮想キーボード).私の活動に滞在肖像モードでは、しっかく再び失ってます。こうした事態が起こらないように HTCヒーロー バージョン。
自分はかなり大きくなっていない場合については、再起動やく全国のキーボードが開きます。ってしまいます。
解決
更新2013んでいます。なかなか良いアイデア2009年最初の答えの問題でもない。この答えによるhackbod理由:
を避ける再読み込み活性asynctaskに向きを変android
追加 android:configChanges="keyboardHidden|orientation"
ごAndroidManifest.xml.これは、システム設定の変更お取り扱う場合によっています。
<activity android:name="MainActivity"
android:screenOrientation="portrait"
android:configChanges="keyboardHidden|orientation">
見開発の参考 configChanges できます。
ただし、お申し込み可能な中断することで、例えばによる電話、本当には追加のコードを保存する状態のお申し込みが停止した.
更新: としてのAndroid3.2いものを追加する必要がある"screenSize":
<activity
android:name="MainActivity"
android:screenOrientation="portrait"
android:configChanges="keyboardHidden|orientation|screenSize">
から開発者ガイド 取り扱いの設定変更を自分で
注意:はじめAndroid3.2(APIレベルの13)、"画面サイズ" も変化している場合に切り替えを表 います。このようにしたい場合は、防止の実行再開により 配向変化が開発のためのAPIレベル13以上として を宣言していたminSdkVersionとtargetSdkVersion属性) なければならず、"screenSize"の値を"配向" 値とします。ということは、お受けることが必要
android:configChanges="orientation|screenSize"
.ただし、お 応募対象APIレベルの12以下、その活動を常に 取り扱うこの構成の変化(この設定変更 スタートがかかりませんのでご活動も実行する場合は、Android3.2以 高くなります。
他のヒント
あなたは Intrications の(以前アシュトン)が述べたようにAndroidManifest.xmlをを変更し、活動がonConfigurationChangedイベントを処理することを確認する必要がありますあなたが望むようには処理されます。これは、それがどのように見えるべきかあります:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
私はいつもあなたが
の両方を必要とすることがわかりましたandroid:screenOrientation="nosensor" android:configChanges="keyboardHidden|orientation"
を示したことを強調しました、 android:configChanges
の活動(マニフェストファイル) keyboardHidden|orientation
そして、それから:
1)オーバーライド onConfigurationChanged()
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
//here you can handle orientation change
}
2)この機能を追加ライン活動の onCreate()
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
こちらのような追加と同じライン onConfigurationChanged
, からのアプリに切り替わり肖像モードとその背景観であることを伝えてくださいが起こる一時間で迷惑).
も設定できます android:screenOrientation="nosensor"
のための活動(マニフェスト). が この方法だけでは対応できる配向変化。
これを使用します..
android:screenOrientation="portrait"
あなたの活動のOnCreateの方法では、このコードを使用します:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
今、あなたの向きが縦に設定され、変更されることはありません。
のAndroidManifest.xml ファイル毎に活動したいロックの最後に追加 screenOrientation
ライン:
android:label="@string/app_name"
android:name=".Login"
android:screenOrientation="portrait" >
または android:screenOrientation="風景".
あなたののAndroidManifest.xml のファイルでます:
<activity android:name="MainActivity" android:configChanges="keyboardHidden|orientation">
または
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
コードして画面をロックするには、画面(0、90、180、270)の実際の回転を使用する必要があり、あなたが自然な位置が縦とになり、スマートフォンで、それの自然な位置を知っている必要がタブレットは、それが風景になります。
ここでは、コードは(メソッドをロックし、アンロック)ですが、それはいくつかのデバイス(スマートフォンやタブレット)でテストされており、それは素晴らしい作品ます。
public static void lockScreenOrientation(Activity activity)
{
WindowManager windowManager = (WindowManager) activity.getSystemService(Context.WINDOW_SERVICE);
Configuration configuration = activity.getResources().getConfiguration();
int rotation = windowManager.getDefaultDisplay().getRotation();
// Search for the natural position of the device
if(configuration.orientation == Configuration.ORIENTATION_LANDSCAPE &&
(rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_180) ||
configuration.orientation == Configuration.ORIENTATION_PORTRAIT &&
(rotation == Surface.ROTATION_90 || rotation == Surface.ROTATION_270))
{
// Natural position is Landscape
switch (rotation)
{
case Surface.ROTATION_0:
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
break;
case Surface.ROTATION_90:
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT);
break;
case Surface.ROTATION_180:
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
break;
case Surface.ROTATION_270:
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
break;
}
}
else
{
// Natural position is Portrait
switch (rotation)
{
case Surface.ROTATION_0:
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
break;
case Surface.ROTATION_90:
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
break;
case Surface.ROTATION_180:
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT);
break;
case Surface.ROTATION_270:
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
break;
}
}
}
public static void unlockScreenOrientation(Activity activity)
{
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
}
Visual Studio Xamarin:
- 追加:
using Android.Content.PM;
いた活動が名前空間を一覧です。
- 追加:
[Activity(ScreenOrientation = Android.Content.PM.ScreenOrientation.Portrait)]
属性としていたクラスのような:
[Activity(ScreenOrientation = ScreenOrientation.Portrait)]
public class MainActivity : Activity
{...}
追加
android:configChanges="keyboardHidden|orientation|screenSize"
あなたのマニフェストにます。
方法のいずれもが、今動いていないようにみえ、注意してください!
のAndroid Studioは1つの1の簡単な方法は、追加することですに
android:screenOrientation="nosensor"
ます。
これは、効果的に画面の向きをロックします。