Android uygulamamdaki bazı görünümler için manzara modunu nasıl devre dışı bırakabilirim?
Android uygulamamdaki bazı görünümler için manzara modunu nasıl devre dışı bırakabilirim?
Yanıtlar:
android:screenOrientation="portrait"
AndroidManifest.xml'deki etkinliğe ekleyin . Örneğin:
<activity android:name=".SomeActivity"
android:label="@string/app_name"
android:screenOrientation="portrait" />
DÜZENLEME: Bu çok popüler bir cevap haline geldiğinden, zorla portre sık sık uygulandığı sorunlara doğru çözüm olduğundan suçlu hissediyorum.
Zorla portre ile büyük uyarılar:
retainInstance
parçaları kullanmayı öğrenir .Bu nedenle çoğu uygulama, telefon sensörlerinin, yazılımın ve fiziksel yapılandırmanın kullanıcının uygulamanızla nasıl etkileşim kurmak istediği konusunda kendi kararlarını vermesine izin vermelidir. Yine sensor
de, kullanım durumunuzdaki varsayılan yönelim davranışından memnun değilseniz, düşünmek isteyebileceğiniz birkaç durum:
nosensor
yönlendirme için kullanmayı düşündüğünüz etkinliklerin ortasında yanlışlıkla yönlendirme değişiklikleri yapıyorsa . Bu, çoğu tablette ve çoğu telefonda portre çekmeye zorlar, ancak yine de çoğu "normal" uygulama için tavsiye etmem (bazı kullanıcılar sadece telefonlarındaki yatay ekran klavyesini yazmak ister ve birçok tablet kullanıcısı portre olarak okur - ve izin vermelisiniz).sensorPortrait
daha iyi olabilir portrait
Android 2.3+ için; Bu, tablet kullanımında oldukça yaygın olan baş aşağı portre sağlar.AndroidManifest.xml
Bu yazıyı okuyana kadar dosya geçişinin farkında değildim, bu yüzden uygulamalarımda bunun yerine kullandım:
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); // Fixed Portrait orientation
Bunu android:screenOrientation="portrait"
manifest dosyanıza böyle bir etkinliğinizi ilan ettiğiniz yere ekleyin
<activity android:name=".yourActivity"
....
android:screenOrientation="portrait" />
Java kodunu kullanarak yapmak istiyorsanız
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
setContentView
içindeki etkinliğiniz için yöntem çağırmadan önce onCreate()
.
Umarım bu yardım ve herkes için kolayca anlaşılabilir ...
Burada cevapların birçoğu "portrait"
AndroidManifest.xml dosyanızda kullanmanızı önerir . Bu iyi bir çözüm gibi görünebilir - ancak belgelerde belirtildiği gibi, yalnızca manzaraya sahip olabilecek cihazları seçiyorsunuz. Ayrıca, belirli cihazları (manzarada en iyi şekilde çalışan), uygun yönlendirmeyi elde etmemek için portreye girmeye zorluyorsunuz.
Benim önerim "nosensor"
bunun yerine kullanmak . Bu, cihazın varsayılan tercih edilen yönünü kullanmasına izin verir, Google Play'de satın alma / indirme işlemlerini engellemez ve sensörün (benim durumumda NDK) oyununuzu bozmamasını sağlar.
Manifestinize bu çizgi gibi ekleyin
android: screenOrientation "portre" =
<manifest
package="com.example.speedtest"
android:versionCode="1"
android:versionName="1.0" >
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="ComparisionActivity"
android:label="@string/app_name"
android:screenOrientation="portrait" >
</activity>
</application>
</manifest>
Kullanıcı ayarlarını istiyorsanız,
o zaman tavsiye ederim setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Ayarları bir ayarlar menüsünden değiştirebilirsiniz.
Bunu istiyorum çünkü zamanlayıcılarım ekrandakine karşılık gelmeli ve ekranı döndürmek mevcut etkinliği yok edecektir.
Bunu, tüm faaliyetlerinizin ortak bir taban sınıfını genişletmesine gerek kalmadan tüm uygulamanız için yapabilirsiniz.
İşin püf noktası, projenize bir Uygulama alt sınıfı eklediğinizden emin olmaktır. Uygulamanız ilk başlatıldığında çağrılan onCreate () öğesinde, etkinlik yaşam döngüsü olaylarıyla ilgili bildirimler almak için bir ActivityLifecycleCallbacks nesnesi (API düzey 14+) kaydedersiniz.
Bu, uygulamanızdaki herhangi bir etkinlik başlatıldığında (veya durdurulduğunda veya devam ettirildiğinde veya her neyse) kendi kodunuzu yürütme fırsatı verir. Bu noktada, yeni oluşturulan etkinlikte setRequestedOrientation () yöntemini çağırabilirsiniz.
Manifest dosyanıza app: name = ". MyApp" eklemeyi unutmayın.
class MyApp extends Application {
@Override
public void onCreate() {
super.onCreate();
// register to be informed of activities starting up
registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(Activity activity,
Bundle savedInstanceState) {
// new activity created; force its orientation to portrait
activity.setRequestedOrientation(
ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
....
});
}
}
Bunu Faaliyetin onCreate () öğesinde kullanın
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
android:screenOrientation="sensorPortrait"
AndroidManifest.xml dosyasında değişmelisiniz
Bu özelliği etkinlik etiketinize eklemeniz yeterlidir.
android:screenOrientation="portrait"
Etkinliğin her bir manifest girişine yönlendirme zorluğu yaşamak istemiyorsanız, uygulamanızın 'Etkinlik yerine her etkinliği tarafından devralınacak bir BaseActivity sınıfı (' Activity 'veya' AppCompatActivity 'miras) oluşturun 'veya' AppCompatActivity'yi seçin ve BaseActivity'nize aşağıdaki kod parçasını ekleyin:
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
// rest of your code......
}
android:screenOrientation="portrait"
Manzara modunu devre dışı bırakmak istediğiniz etkinliğe ekleyin .
Devre dışı bırakmak Landscape mode for your android app
(veya tek bir etkinliği) yapmak istiyorsanız tek yapmanız gereken eklemektir,
android:screenOrientation="portrait"
AndroidManifest.xml
dosyadaki etkinlik etiketine ekleyin.
Sevmek:
<activity android:name="YourActivityName"
android:icon="@drawable/ic_launcher"
android:label="Your App Name"
android:screenOrientation="portrait">
Başka Bir Yol, Programatik Yaklaşım.
Bunu programlı olarak yapmak istiyorsanız yani. Java kodu kullanarak. Bunu, yatay modda görüntülenmesini istemediğiniz etkinliğin Java sınıfına aşağıdaki kodu ekleyerek yapabilirsiniz.
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Ben fazla ayrıntı .Çalıştırıcılı size yardımcı olur umarım buradan ziyaret edebilirsiniz burada bağlantı açıklama girin
android:screenOrientation="nosensor">
Bazı görünümlerde yön değiştirme
Tüm etkinliğin yönünü kilitlemek yerine bu sınıfı, yönünüzü pragmatik olarak dinamik bir şekilde kilitlemek için kullanabilirsiniz: -
Görünümünüzü Manzara Yapın
OrientationUtils.lockOrientationLandscape(mActivity);
Görünümünüzü portre yapın
OrientationUtils.lockOrientationPortrait(mActivity);
kilidini Oryantasyon
OrientationUtils.unlockOrientation(mActivity);
Yön Util Sınıfı
import android.app.Activity;
import android.content.Context;
import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
import android.os.Build;
import android.view.Surface;
import android.view.WindowManager;
/* * This class is used to lock orientation of android app in nay android devices
*/
public class OrientationUtils {
private OrientationUtils() {
}
/** Locks the device window in landscape mode. */
public static void lockOrientationLandscape(Activity activity) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
}
/** Locks the device window in portrait mode. */
public static void lockOrientationPortrait(Activity activity) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
/** Locks the device window in actual screen mode. */
public static void lockOrientation(Activity activity) {
final int orientation = activity.getResources().getConfiguration().orientation;
final int rotation = ((WindowManager) activity.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay()
.getRotation();
// Copied from Android docs, since we don't have these values in Froyo
// 2.2
int SCREEN_ORIENTATION_REVERSE_LANDSCAPE = 8;
int SCREEN_ORIENTATION_REVERSE_PORTRAIT = 9;
// Build.VERSION.SDK_INT <= Build.VERSION_CODES.FROYO
if (!(Build.VERSION.SDK_INT <= Build.VERSION_CODES.FROYO)) {
SCREEN_ORIENTATION_REVERSE_LANDSCAPE = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
SCREEN_ORIENTATION_REVERSE_PORTRAIT = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
}
if (rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_90) {
if (orientation == Configuration.ORIENTATION_PORTRAIT) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
} else if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
} else if (rotation == Surface.ROTATION_180 || rotation == Surface.ROTATION_270) {
if (orientation == Configuration.ORIENTATION_PORTRAIT) {
activity.setRequestedOrientation(SCREEN_ORIENTATION_REVERSE_PORTRAIT);
} else if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
activity.setRequestedOrientation(SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
}
}
}
/** Unlocks the device window in user defined screen mode. */
public static void unlockOrientation(Activity activity) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_USER);
}
}
Her etkinliğin yönünü ayarlamanız gerekir.
<activity
android:name="com.example.SplashScreen2"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Black.NoTitleBar" >
</activity>
<activity
android:name="com.example.Registration"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Black.NoTitleBar" >
</activity>
<activity
android:name="com.example.Verification"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Black.NoTitleBar" >
</activity>
<activity
android:name="com.example.WelcomeAlmostDone"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Black.NoTitleBar" >
</activity>
<activity
android:name="com.example.PasswordRegistration"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Black.NoTitleBar" >
</activity>
Xamarin C # kullanıyorsanız bu çözümlerden bazıları çalışmaz. İşte bulduğum çözüm.
[Activity(MainLauncher = true, Icon = "@drawable/icon", ScreenOrientation = ScreenOrientation.Portrait)]
Sınıfın üstünde, diğer çözümlere benzer şekilde, dünya çapında geçerli olmayan ve her etkinlik başlığına yerleştirilmesi iyi çalışır.
Bunu manifest.xml dosyasına yazarak belirli etkinliğinizi her zaman dikey modda kalmaya zorlayabilirsiniz.
<activity android:name=".MainActivity"
android:screenOrientation="portrait"></activity>
Ayrıca, etkinliğinizin onCreate () yönteminde aşağıdaki satırı yazarak etkinliğinizi postrait modunda kalmaya zorlayabilirsiniz
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.your_layout);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
<android . . . >
. . .
<manifest . . . >
. . .
<application>
<activity android:name=".MyActivity"
android:screenOrientation="portrait"
android:configChanges="keyboardHidden|orientation">
</activity>
</application>
</manifest>
</android>
Aşağıda projenize övgüde bulunun,
npm kurulumu
npm i tepki-özgün-yönelim-dolap
sonra React_Native (Proje Klasörünüz) / android / app / src / main / AndroidManifest.xml gibi manifest sınıfını kullanırsınız
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<application
android:name=".MainApplication"
android:label="@string/app_name"
android:icon="@mipmap/ic_launcher"
android:allowBackup="false"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:screenOrientation="landscape"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
android:windowSoftInputMode="adjustResize">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="com.facebook.react.devsupport.DevSettingsActivity" />
</application>
Teşekkür ederim!
Oluşturulan <apphome>/platform/android
dizinde AndroidManifest.xml
( oluşturulan dizinden kopyalayarak). Ardından TÜM etkinlik öğelerine android:screenOrientation=
" portrait
" ekleyin .
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="in.co.nurture.bajajfinserv">
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity" android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Android veya screen: screenOrientation özelliğini kullanarak Etkinliği dikey veya yatay modda kısıtlayabiliriz.
programımda birden fazla faaliyetimiz varsa, herhangi bir moddaki etkinliklerden herhangi birini kısıtlama özgürlüğüne sahipsiniz ve asla istemediğiniz diğerlerini etkilemez.
Ekle android:screenOrientation="portrait"
yılında AndroidManifest.xml dosyası.
Örneğin :
<activity android:name=".MapScreen"
android:screenOrientation="portrait"></activity>
Başka birine yardım etmeyi umarak, AndroidManifest.xml dosyasında ACTIVITY ile ilgili aşağıdaki özellik yeterlidir:
robot: configChanges = "yönlendirme"
Yani, tam etkinlik düğümü:
<activity android:name="Activity1"
android:icon="@drawable/icon"
android:label="App Name"
android:configChanges="orientation">
Benim için çalıştı, bu kodu AndroidManifest dosyasına eklemeye çalışın
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:screenOrientation="portrait"
android:theme="@style/AppTheme">
....
....
</application>
Manifestinize koyun.
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:screenOrientation="sensorPortrait" />
Yön portre olacak, ancak kullanıcının telefonu ters çevrilmişse, doğru yolu da gösterir. (Böylece ekranınız 180 derece dönecektir).
Etkinlik çok pencereli modda çalışıyorsa sistem bu özniteliği yoksayar .
etkinliğiniz ilk cihaz yönlendirme durumuyla ilgili ise, onCreate
yöntemde geçerli cihaz yönünü alın ve sonsuza kadar düzeltin:
int deviceRotation = ((WindowManager) getBaseContext().getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getOrientation();
if(deviceRotation == Surface.ROTATION_0) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
else if(deviceRotation == Surface.ROTATION_180)
{
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT);
}
else if(deviceRotation == Surface.ROTATION_90)
{
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
else if(deviceRotation == Surface.ROTATION_270)
{
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
}