Como posso desativar o modo paisagem para algumas das visualizações no meu aplicativo Android?
Como posso desativar o modo paisagem para algumas das visualizações no meu aplicativo Android?
Respostas:
Adicione android:screenOrientation="portrait"
à atividade no AndroidManifest.xml. Por exemplo:
<activity android:name=".SomeActivity"
android:label="@string/app_name"
android:screenOrientation="portrait" />
EDIT: Como essa se tornou uma resposta super popular, me sinto muito culpado, pois forçar o retrato raramente é a solução certa para os problemas aos quais é frequentemente aplicado.
As principais advertências com retrato forçado:
retainInstance
fragmentos.Portanto, a maioria dos aplicativos deve apenas permitir que os sensores, o software e a configuração física do telefone tomem sua própria decisão sobre como o usuário deseja interagir com seu aplicativo. Em alguns casos, você ainda pode querer pensar se não estiver satisfeito com o comportamento padrão da sensor
orientação no seu caso de uso:
nosensor
a orientação. Isso força a paisagem na maioria dos tablets e o retrato na maioria dos telefones, mas eu ainda não recomendaria isso para a maioria dos aplicativos "normais" (alguns usuários gostam de digitar o teclado de paisagem em seus telefones e muitos usuários de tablets lêem em retrato - e você deve deixá-los).sensorPortrait
pode ser melhor que portrait
no Android 2.3 ou superior; isso permite retratos invertidos, o que é bastante comum no uso de tablets.Eu não estava ciente da AndroidManifest.xml
troca de arquivos até ler esta postagem, então, nos meus aplicativos, usei isso:
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); // Fixed Portrait orientation
Adicione isso android:screenOrientation="portrait"
no seu arquivo de manifesto onde você declara sua atividade como esta
<activity android:name=".yourActivity"
....
android:screenOrientation="portrait" />
Se você quiser usar o código java, tente
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
antes de chamar o setContentView
método para sua atividade em onCreate()
.
Espero que esta ajuda e facilmente compreensível para todos ...
Muitas das respostas aqui estão sugerindo o uso "portrait"
no seu arquivo AndroidManifest.xml. Pode parecer uma boa solução - mas, como observado na documentação, você seleciona dispositivos que podem ter apenas paisagem. Você também está forçando certos dispositivos (que funcionam melhor na paisagem) a serem retratados, sem obter a orientação adequada.
Minha sugestão é usar em seu "nosensor"
lugar. Isso fará com que o dispositivo use sua orientação preferida padrão, não bloqueará compras / downloads no Google Play e garantirá que o sensor não atrapalhe seu jogo (NDK, no meu caso).
Se você deseja configurações do usuário,
então eu recomendo setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Você pode alterar as configurações em um menu de configurações.
Exijo isso porque meus cronômetros devem corresponder ao que está na tela e girá-la destruirá a atividade atual.
Basta adicionar como esta linha em seu manifesto
android: screenOrientation = "portrait"
<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>
Você pode fazer isso para todo o aplicativo sem precisar fazer com que todas as suas atividades estendam uma classe base comum.
O truque é o primeiro a garantir que você inclua uma subclasse Aplicativo no seu projeto. No onCreate (), chamado quando o aplicativo é iniciado pela primeira vez, você registra um objeto ActivityLifecycleCallbacks (nível de API 14+) para receber notificações de eventos do ciclo de vida da atividade.
Isso dá a você a oportunidade de executar seu próprio código sempre que qualquer atividade em seu aplicativo for iniciada (ou parada, retomada ou qualquer outra coisa). Nesse ponto, você pode chamar setRequestedOrientation () na atividade recém-criada.
E não se esqueça de adicionar app: name = ". MyApp" no seu arquivo de manifesto.
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);
}
....
});
}
}
Use isso em onCreate () da atividade
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Você deve alterar android:screenOrientation="sensorPortrait"
no AndroidManifest.xml
Basta adicionar este atributo na sua tag de atividade.
android:screenOrientation="portrait"
Se você não quiser passar pelo aborrecimento de adicionar orientação a cada entrada de manifesto da atividade, crie uma classe BaseActivity (herda 'Activity' ou 'AppCompatActivity') que será herdada por todas as atividades do seu aplicativo em vez de 'Activity 'ou' AppCompatActivity 'e adicione o seguinte trecho de código em sua BaseActivity:
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
// rest of your code......
}
Adicione android:screenOrientation="portrait"
à atividade que você deseja desativar o modo paisagem.
Se você deseja desativar Landscape mode for your android app
(ou uma única atividade), tudo o que você precisa fazer é adicionar,
android:screenOrientation="portrait"
para a tag de atividade no AndroidManifest.xml
arquivo.
Gostar:
<activity android:name="YourActivityName"
android:icon="@drawable/ic_launcher"
android:label="Your App Name"
android:screenOrientation="portrait">
Outra maneira, abordagem programática.
Se você quiser fazer isso programaticamente ou seja. usando código Java. Você pode fazer isso adicionando o código abaixo na classe Java da atividade que você não deseja exibir no modo paisagem.
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Espero que ajude você. Para obter mais detalhes, visite aqui, digite a descrição do link aqui
android:screenOrientation="nosensor">
Como alterar a orientação em algumas das visualizações
Em vez de bloquear a orientação de toda a atividade, você pode usar esta classe para bloquear dinamicamente a orientação de qualquer ponto de vista pragmaticamente: -
Faça sua vista paisagem
OrientationUtils.lockOrientationLandscape(mActivity);
Faça sua vista Retrato
OrientationUtils.lockOrientationPortrait(mActivity);
Desbloquear orientação
OrientationUtils.unlockOrientation(mActivity);
Classe Util da Orientação
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);
}
}
Você deve definir a orientação de cada atividade.
<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>
Se você estiver usando o Xamarin C #, algumas dessas soluções não funcionarão. Aqui está a solução que eu encontrei para trabalhar.
[Activity(MainLauncher = true, Icon = "@drawable/icon", ScreenOrientation = ScreenOrientation.Portrait)]
Acima da classe funciona bem, semelhante a outras soluções, também não é aplicável globalmente e precisa ser colocado em cada cabeçalho de atividade.
Você pode forçar sua atividade específica a permanecer sempre no modo retrato escrevendo isso em seu manifest.xml
<activity android:name=".MainActivity"
android:screenOrientation="portrait"></activity>
Você também pode forçar sua atividade a permanecer no modo pós-escrito, escrevendo a seguinte linha no método onCreate () da sua atividade
@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>
Adicione abaixo elogie seu projeto,
instalação npm
npm i reage-nativo-orientação-armário
então você usa a classe manifest, como React_Native (sua pasta do projeto) / android / app / src / main / AndroidManifest.xml
<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>
Obrigado!
No <apphome>/platform/android
diretório criado AndroidManifest.xml
(copiando-o do gerado). Em seguida, adicione android:screenOrientation=
" portrait
" a TODOS os elementos da atividade.
<?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>
podemos restringir a atividade no modo retrato ou paisagem usando o atributo ou android: screenOrientation.
se tivermos mais de uma atividade no meu programa, você terá liberdade para restringir qualquer atividade em qualquer modo e nunca afetará os outros que você não deseja.
Ou na classe manifesto.
<activity android:name=".yourActivity"
....
android:screenOrientation="portrait" />
ou programaticamente
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Nota: você deve chamar isso antes do setContentView
método para sua atividade em onCreate()
.
Adicionar android:screenOrientation="portrait"
no AndroidManifest.xml arquivo.
Por exemplo :
<activity android:name=".MapScreen"
android:screenOrientation="portrait"></activity>
Na esperança de ajudar outra pessoa, basta o seguinte atributo no ACTIVITY no AndroidManifest.xml:
android: configChanges = "orientação"
Portanto, nó de atividade completo:
<activity android:name="Activity1"
android:icon="@drawable/icon"
android:label="App Name"
android:configChanges="orientation">
Funcionou para mim. Tente adicionar este código no arquivo AndroidManifest
<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>
Coloque no seu manifesto.
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:screenOrientation="sensorPortrait" />
A orientação será vertical, mas se o telefone do usuário estiver de cabeça para baixo, ele também mostrará a maneira correta. (Portanto, sua tela girará 180 graus).
O sistema ignorará esse atributo se a atividade estiver em execução no modo de várias janelas .
se sua atividade estiver relacionada ao primeiro estado de orientação do dispositivo, obtenha a orientação atual do dispositivo no onCreate
método e corrija-a para sempre:
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);
}