私はここでこの問題に対する答えのいくつかを読みましたが、どういうわけか私はそれを機能させることができません。
私のAndroidManifest.xmlは次のようになります。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android" package="mWidas2.mWidas2" Android:versionCode="1" Android:versionName="1.0" Android:installLocation="auto">
<uses-sdk />
<uses-permission Android:name="Android.permission.INTERNET" />
<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" />
<application Android:label="WQS" Android:icon="@drawable/temporaryIcon">
<activity Android:name=".MainActivity"
Android:configChanges="keyboard|keyboardHidden|orientation" />
</application>
</manifest>
私はまだ横向きモードに切り替えることができますが、横向きモードではレイアウトがかなり醜くなるので、それを避けたいと思います。感謝します。
重要なことかもしれません:私は最新のXamarinを使用してアプリを開発しています
クラス属性を使用して、activity
にportrait
のタグを付けることができます。
[Activity (Label = "MyMainScreen", MainLauncher = true, ScreenOrientation = ScreenOrientation.Portrait)]
public class Activity1 : Activity
これは、クラス名をハードコーディングせずにXamarinによって生成された自動生成されたクラス名のために、アクティビティを常に縦向きにする唯一の方法です。
このQ/Aに関して多くのIMの質問を受けたので、マニフェストメソッドの使用が機能しない理由についての回答を拡大しています。
Xamarinは、アクティビティクラスにName
属性が割り当てられていないアクティビティの完全修飾クラス名を自動生成します。
Xamarin Android .apk
から署名/生成されたマニフェストを見ると、次のようなクラス名が表示されます。
md5d2519388ea1895e3e3594794d2e0c4ce.MainActivity
マニフェストにドット名クラス識別子をタグ付けしているため、パッケージ名のプレフィックスが付けられます。
<activity Android:name=".MainActivity"
完全修飾クラス名は一致しません。ピリオドで始まるクラス名にはパッケージ名のプレフィックスが付けられ、自動生成されたクラス名とは一致しないためです。
Name
属性のActivity
要素を使用して、この自動生成された完全修飾クラス名を回避し、自動生成された名前が作成されないようにすることができます。
[Activity(Label = "PlayScriptStarling", Name = "com.sushihangover.playscriptstarling.MyBigBadGameEveryOneShouldPlay", MainLauncher = true, Icon = "@mipmap/icon")]
ここで、パッケージ名が「com.sushihangover.playscriptstarling」であると仮定して、次を使用します。
<activity Android:name=".MyBigBadGameEveryOneShouldPlay"
マニフェストで展開されたものがコード内のものと一致すると、マニフェスト内のクラス名として機能します。
問題は、パッケージ名が変更された場合、マニフェストのdot class names
が壊れることです。したがって、ScreenOrientation = ScreenOrientation.Portrait
を使用すると、オリエンテーションをよりクリーンに割り当てることができ、すべてのアクティビティに完全修飾クラス名を割り当てる必要がなく、パッケージ名が変更されても壊れません。
注:Name
クラス属性内のActivity
要素はdot class names
をサポートしておらず、完全に拡張されたクラス名を使用する必要があります。これは、機能リクエストとしてXamarinに送信されました...
Android画面の向きの変更(縦向き-横向き)
1。Androidでのロック画面の向きの変更
画面は常にポートレートモードで表示されます。デバイスを回転させても、現在のアクティビティに変更は適用されません。
Android:screenOrientation="portrait"
アプリケーション画面全体をロックしたい場合。アプリケーションのすべてのアクティビティに上記のコードを記述する必要があります。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android" package="mWidas2.mWidas2" Android:versionCode="1" Android:versionName="1.0" Android:installLocation="auto">
<uses-sdk />
<uses-permission Android:name="Android.permission.INTERNET" />
<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" />
<application Android:label="WQS" Android:icon="@drawable/temporaryIcon">
<activity Android:name=".MainActivity"
Android:screenOrientation="portrait"
Android:configChanges="keyboard|keyboardHidden|orientation" />
</application>
</manifest>
2。Androidでプログラムによって画面の向き(画面の回転)をロックする
このオプションは少し注意が必要です。私たちがする必要があるのは、画面の向きの変更(回転の変更)イベントを取得し、次に横向きと縦向きの両方のモードのイベントで、要件に応じて横向きまたは縦向きのエーテルモードを設定します。以下はコードです。常にポートレートモードを設定するため、画面は常にポートレートモードのままになります。
// Check screen orientation or screen rotate event here
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// Checks the orientation of the screen for landscape and portrait and set portrait mode always
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
}
。Androidではいつでもプログラムで画面の向きを変更できます
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
4。実行時に画面の向きを取得する方法
//Get current screen orientation
Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
int orientation = display.getOrientation();
switch(orientation) {
case Configuration.ORIENTATION_PORTRAIT:
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
break;
case Configuration.ORIENTATION_LANDSCAPE:
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
break;
}
5。Androidで画面の向きの変更イベントを検索
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// Checks the orientation of the screen for landscape and portrait
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
}
}
<activity Android:name=".MainActivity"
Android:configChanges="keyboard|keyboardHidden|orientation"
Android:screenOrientation="portrait" />
上記のコーディングを使用しますaddAndroid:screenOrientation="portrait"
in <activity>
タブ。
これを使って
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android" package="mWidas2.mWidas2" Android:versionCode="1" Android:versionName="1.0" Android:installLocation="auto">
<uses-sdk />
<uses-permission Android:name="Android.permission.INTERNET" />
<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" />
<application Android:label="WQS" Android:icon="@drawable/temporaryIcon">
<activity Android:name=".MainActivity"
Android:screenOrientation="portrait"
Android:configChanges="keyboard|keyboardHidden|orientation" />
</application>
</manifest>
[〜#〜]または[〜#〜]
画面を変更したい場合オリエンテーション at 実行時以下を追加
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);//For Portrait
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);//For Lndscape
この行を追加し、
<activity Android:name=".MainActivity"
Android:screenOrientation="portrait"
Android:configChanges="keyboard|keyboardHidden|orientation" />
これを試して:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android" package="mWidas2.mWidas2" Android:versionCode="1" Android:versionName="1.0" Android:installLocation="auto">
<uses-sdk />
<uses-permission Android:name="Android.permission.INTERNET" />
<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" /
<application Android:label="WQS" Android:icon="@drawable/temporaryIcon
<activity Android:name=".MainActivity"
Android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
Android:screenOrientation="portrait" />
</application>
</manifest>