回答:
android:screenOrientation="portrait"
manifest.xmlファイルで各アクティビティを指定できます。application
タグにこのオプションを指定することはできません。
他のオプションは、たとえばActivity
基本クラスでプログラムで行うことです。
@Override
public void onCreate(Bundle savedInstanceState) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
最後のオプションは、Android 4.0(API 14以降)以降でのみ利用可能なアクティビティライフサイクルリスナーでそれを行うことです。すべてがカスタムApplication
クラスで発生します。
@Override
public void onCreate() {
super.onCreate();
registerActivityLifecycleCallbacks(new ActivityLifecycleAdapter() {
@Override
public void onActivityCreated(Activity a, Bundle savedInstanceState) {
a.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
});
}
ActivityLifecycleAdapter
空の実装となる、作成する必要のある単なるヘルパークラスですActivityLifecycleCallbacks
(そのため、単に1つが必要なときに、そのインターフェイスのすべてのメソッドをオーバーライドする必要はありません)。
はい、これはプログラムで行うことも、すべてのアクティビティに対して、すべてのアクティビティが拡張するAbstractActivityを作成することもできます。
public abstract class AbstractActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
}
この抽象アクティビティは、グローバルメニューにも使用できます。
ActivityInfo.SCREEN_ORIENTATION_NOSENSOR
一部のデバイスは縦向きではないため、デバイスをデフォルトの状態のままにすることを目的としているため、これがより良い答えになるはずです。ただし、「nosensor」は私にとっては機能しないため、@ arconeの答えは私にとって有効です。
すべてのアクティビティで共通の基本クラスを拡張する必要なく、アプリケーション全体でこれを行うことができます。
秘訣は、まずApplication
プロジェクトにサブクラスを含めることです。その中でonCreate()
、あなたのアプリケーションが最初に起動したとき、あなたは登録と呼ばれるActivityLifecycleCallbacks
活動のライフサイクルイベントの通知を受信するオブジェクト(APIレベル14+)。
これはあなたにいつでも独自のコードを実行する機会与えます任意のあなたのアプリでの活動を開始(または停止、または再開、または何でも)さを。この時点setRequestedOrientation()
で、新しく作成したアクティビティを呼び出すことができます。
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);
}
....
});
}
}
使用する:
android:screenOrientation="portrait"
この行を、ポートレートモードでのみ表示する各アクティビティのアプリケーションのマニフェストファイルに書き込むだけです。
Android開発者ガイドから:
"orientation"画面の向きが変更されました—ユーザーがデバイスを回転させました。注:アプリケーションがAPIレベル13以上をターゲットにしている場合(minSdkVersionおよびtargetSdkVersion属性で宣言されているとおり)、「screenSize」構成も宣言する必要があります。これは、デバイスが縦向きと横向きの間で切り替わるときにも変化するためです。
"screenSize"現在使用可能な画面サイズが変更されました。これは、現在のアスペクト比に対する現在利用可能なサイズの変化を表すため、ユーザーが横向きと縦向きを切り替えると変化します。ただし、アプリケーションがAPIレベル12以下をターゲットにしている場合、アクティビティは常にこの構成変更を自身で処理します(この構成変更は、Android 3.2以降のデバイスで実行されている場合でも、アクティビティを再開しません)。APIレベル13で追加されました。
したがって、AndroidManifest.xmlファイルには、次のように記述できます。
<activity
android:name=".activities.role_activity.GeneralViewPagerActivity"
android:label="@string/title_activity_general_view_pager"
android:screenOrientation="portrait"
android:configChanges="orientation|keyboardHidden|screenSize"
>
</activity>
<preference name="orientation" value="portrait" />
下に追加<widget>
config.xmlのにとうまくいきました。
(他のソリューションは私のデバイスでは機能しなかったか、ビルド中に上書きされたか、ビルドプロセス中に非推奨エラーを出しました。)
マニフェストファイルで、"portrait"で使用するアクティビティを次のコードをActivityタグに記述する必要があります
android:screenOrientation="portrait"
このような
android:icon="@drawable/icon"
android:name="com.zemkoapps.hd.wallpaper.AndroidGridLayoutActivity"
android:screenOrientation="portrait" >
しかし、画面を横向きにしたい場合は、このコードを次のように使用します
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);
}
誰かが疑問に思っている場合、すべてのアクティビティにKotlinの共通基本クラスを拡張させることなく、アプリケーション全体でこれを行うにはどうすればよいですか。以下の例を参照してください。
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?) {
}
})
}
}
次に、共通の基本クラスをAndroidManifestに追加する必要があります。
<application android:allowBackup="true"
android:name=".InteractiveStoryApplication"
Graham Borlandの回答に似ています...しかし、必要ない場合はApplicationクラスを作成する必要がないようです...プロジェクトで基本アクティビティを作成するだけです
public class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_base);
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
そして、Potraitモードを使用するAppCompatActivityの代わりにこのクラスを拡張します。
public class your_activity extends BaseActivity {}
マニフェストに次のように入力します。
<activity
android:screenOrientation="portrait"
<!--- Rest of your application information ---!>
</activity>