我在这里阅读了这个问题的一些答案,但不知怎的,我没有让它发挥作用。
我的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开发应用程序
答案 0 :(得分:14)
您可以使用类属性将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")]
现在,假设您的包名是&#34; com.sushihangover.playscriptstarling&#34;,使用:
<activity android:name=".MyBigBadGameEveryOneShouldPlay"
清单中的将作为类名,一旦在清单中展开,就会与代码中的一个匹配。
问题是,如果您的包名更改,则会破坏清单中的dot class names
。因此,使用ScreenOrientation = ScreenOrientation.Portrait
是一种更简洁的分配方向,不需要您在每个活动中分配完全限定的类名,并且如果包名更改,则不会中断。
注意:Name
class属性中的Activity
元素不支持dot class names
,并且需要使用完全展开的类名。这已作为功能请求提交给Xamarin ......
答案 1 :(得分:4)
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);
}
}
第3。在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();
}
}
答案 2 :(得分:1)
<activity android:name=".MainActivity"
android:configChanges="keyboard|keyboardHidden|orientation"
android:screenOrientation="portrait" />
在android:screenOrientation="portrait"
标签中使用上述编码添加<activity>
。
答案 3 :(得分:0)
添加此行,
<activity android:name=".MainActivity"
android:screenOrientation="portrait"
android:configChanges="keyboard|keyboardHidden|orientation" />
答案 4 :(得分:0)
试试这个:
<?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>
答案 5 :(得分:0)
使用此
<?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>
或
如果您想在运行时更改屏幕方向,请添加以下内容
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);//For Portrait
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);//For Lndscape