Respostas:
Você pode especificar android:screenOrientation="portrait"
para cada atividade no seu arquivo manifest.xml. Você não pode especificar esta opção na application
tag.
Outra opção é fazer isso programaticamente, por exemplo, em uma Activity
classe base:
@Override
public void onCreate(Bundle savedInstanceState) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
A última opção é fazer isso com os listeners do ciclo de vida da atividade, disponíveis apenas desde o Android 4.0 (API 14 ou superior). Tudo acontece em uma Application
classe personalizada :
@Override
public void onCreate() {
super.onCreate();
registerActivityLifecycleCallbacks(new ActivityLifecycleAdapter() {
@Override
public void onActivityCreated(Activity a, Bundle savedInstanceState) {
a.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
});
}
ActivityLifecycleAdapter
é apenas uma classe auxiliar que você precisará criar, a qual será uma implementação vazia ActivityLifecycleCallbacks
(para que você não precise substituir todos os métodos dessa interface quando precisar de um deles).
Sim, você pode fazer isso programaticamente e para todas as suas atividades, criando uma AbstractActivity que todas as suas atividades se estendem.
public abstract class AbstractActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
}
Essa atividade abstrata também pode ser usada para um menu global.
ActivityInfo.SCREEN_ORIENTATION_NOSENSOR
deve ser a melhor resposta, pois se destina a deixar o dispositivo no estado padrão, porque alguns dispositivos não têm a orientação Retrato. No entanto, 'nosensor' NÃO funciona para mim, então a resposta da @ arcone me representa.
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 Application
subclasse no seu projeto. Por isso onCreate()
, chamado quando o aplicativo é iniciado pela primeira vez, você registra um ActivityLifecycleCallbacks
objeto (nível de API 14+) para receber notificações de eventos do ciclo de vida da atividade.
Isso oferece a oportunidade de executar seu próprio código sempre que qualquer atividade em seu aplicativo é iniciada (ou parada, retomada ou qualquer outra coisa). Nesse ponto, você pode chamar setRequestedOrientation()
a atividade recém-criada.
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);
}
....
});
}
}
Você pode definir isso no seu arquivo de manifesto.
android:name=".your launching activity name"
android:screenOrientation="portrait"
e você também pode obter o mesmo escrevendo o código no seu arquivo de classe como:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Adicione android: screenOrientation = "portrait" à atividade no AndroidManifest.xml. Por exemplo:
<activity android:name=".SomeActivity"
android:label="@string/app_name"
android:screenOrientation="portrait">
Usar:
android:screenOrientation="portrait"
Basta escrever esta linha no arquivo de manifesto do seu aplicativo em cada atividade que você deseja mostrar apenas no modo retrato.
A partir do guia do desenvolvedor do Android:
"orientação" A orientação da tela mudou - o usuário girou o dispositivo. Nota: Se o seu aplicativo tiver como alvo a API nível 13 ou superior (conforme declarado pelos atributos minSdkVersion e targetSdkVersion), você também deverá declarar a configuração "screenSize", pois ela também muda quando um dispositivo alterna entre as orientações retrato e paisagem.
"screenSize" O tamanho da tela atual disponível foi alterado. Isso representa uma alteração no tamanho disponível no momento, em relação à proporção atual, e será alterada quando o usuário alternar entre paisagem e retrato. No entanto, se o seu aplicativo atingir a API de nível 12 ou inferior, sua atividade sempre lida com essa alteração de configuração (ela não reinicia sua atividade, mesmo quando executada em um dispositivo Android 3.2 ou superior). Adicionado no nível 13 da API.
Portanto, no arquivo AndroidManifest.xml, podemos colocar:
<activity
android:name=".activities.role_activity.GeneralViewPagerActivity"
android:label="@string/title_activity_general_view_pager"
android:screenOrientation="portrait"
android:configChanges="orientation|keyboardHidden|screenSize"
>
</activity>
Adicionar <preference name="orientation" value="portrait" />
abaixo <widget>
no meu config.xml funcionou para mim.
(As outras soluções não funcionaram no meu dispositivo, foram substituídas durante a criação ou deram erros de descontinuação durante o processo de criação.)
no arquivo manifesto qual atividade você deseja usar em "retrato", você deve escrever esse código na marca de atividade
android:screenOrientation="portrait"
como isso
android:icon="@drawable/icon"
android:name="com.zemkoapps.hd.wallpaper.AndroidGridLayoutActivity"
android:screenOrientation="portrait" >
mas se você quiser tela na paisagem use esse código assim
android:screenOrientation="landscape"
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//setting screen orientation locked so it will be acting as potrait
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED);
}
Se alguém estava se perguntando, como você poderia fazer isso em todo o aplicativo sem precisar fazer com que todas as suas atividades estendessem uma classe base comum no Kotlin , veja o exemplo abaixo:
class InteractiveStoryApplication: Application() {
override fun onCreate() {
super.onCreate()
registerActivityLifecycleCallbacks(object: ActivityLifecycleCallbacks {
override fun onActivityCreated(activity: Activity?, savedInstanceState: Bundle?) {
activity?.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
}
override fun onActivityPaused(activity: Activity?) {
}
override fun onActivityResumed(activity: Activity?) {
}
override fun onActivityDestroyed(activity: Activity?) {
}
override fun onActivitySaveInstanceState(activity: Activity?, outState: Bundle?) {
}
override fun onActivityStarted(activity: Activity?) {
}
override fun onActivityStopped(activity: Activity?) {
}
})
}
}
e então você deve adicionar sua classe base comum no AndroidManifest da seguinte forma:
<application android:allowBackup="true"
android:name=".InteractiveStoryApplication"
Semelhante à resposta de Graham Borland ... mas parece que você não precisa criar a classe Application se não quiser ... basta criar uma Atividade Base no seu projeto
public class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_base);
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
E estenda essa classe em vez de AppCompatActivity onde você deseja usar o Modo Potrait
public class your_activity extends BaseActivity {}
Para usuários do Xamarin:
Se você estender todas as suas atividades a um BaseActivity
Basta adicionar:
this.RequestedOrientation = ScreenOrientation.Portrait;
Isso resolverá o problema. Se você deseja que uma atividade específica esteja na paisagem, substitua-a por OnActivityCreated
. Como:
this.Activity.RequestedOrientation = ScreenOrientation.Landscape;
No seu manifesto, digite isto:
<activity
android:screenOrientation="portrait"
<!--- Rest of your application information ---!>
</activity>