web-dev-qa-db-ja.com

Android + XAMARIN +画面を強制的に「ポートレート」モードのままにします(AndroidManifestを使用)

私はここでこの問題に対する答えのいくつかを読みましたが、どういうわけか私はそれを機能させることができません。

私の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を使用してアプリを開発しています

11
hullunist

クラス属性を使用して、activityportraitのタグを付けることができます。

[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に送信されました...

17
SushiHangover

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();
        }
    }
4
<activity Android:name=".MainActivity"
Android:configChanges="keyboard|keyboardHidden|orientation"
Android:screenOrientation="portrait" />

上記のコーディングを使用しますaddAndroid:screenOrientation="portrait" in <activity> タブ。

1
Praveen Kumar

これを使って

<?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
0
Rakshit Nawani

この行を追加し、

<activity Android:name=".MainActivity"
 Android:screenOrientation="portrait"
 Android:configChanges="keyboard|keyboardHidden|orientation" />
0
Pradeep Gupta

これを試して:

<?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>