私のアプリはポートレートモードにする必要があるため、次の方法でマニフェストに設定します。
Android:screenOrientation="portrait"
しかし、私は最近、もう1つのフラグメント(FragA)を追加しました。 FragAの内部に置いて、フラグメントを横向きにして、アプリの残りの部分をポートレートに保持できるものはありますか?これにより、他のフラグメントに何かを追加して、ポートレートとして保持する必要がありますか?
方向属性はアクティビティごとに設定されるため、フラグメントを含むアクティビティのみの方向を宣言して、フラグメントが横向きになり、残りのアクティビティがそのまま残るようにすることができます。
特定の(この場合は縦長の)向きにするフラグメントで、次のコード行を使用します。
getActivity().setRequestedOrientation(
ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
ユーザーがデバイスを保持する方法に基づいて、フラグメントに方向を設定する場合は、次のコード行を使用します。
getActivity().setRequestedOrientation(
ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
これで目的のソリューションが得られることを願っています。
各フラグメントで、要求された方向を設定します。
リファレンスドキュメント: http://developer.Android.com/reference/Android/content/pm/ActivityInfo.html
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Fragment locked in portrait screen orientation
getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
// Fragment locked in landscape screen orientation
getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
// Fragment screen orientation normal both portait and landscape
getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
}
フラグメントFragAで:
@Override
public void onResume() {
super.onResume();
getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
@Override
public void onPause() {
getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
super.onPause();
}
onPauseメソッドコードにより、アクティビティが縦向きに戻ることが保証されます
だから私は今この問題に取り組んでいます。 portrait mode application(今のところ)しかありません。しかし、landscapeにある必要があるフラグメントが1つあります。単一のアクティビティアプローチを使用しているため、受け入れられた答えが役に立たない。
私が考えることができる最速の解決策はこれです。
private var swappingOrientation = false
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
if(savedInstanceState == null) {
swappingOrientation = true
activity?.apply {
requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
}
}
}
override fun onDestroy() {
super.onDestroy()
if(!swappingOrientation) {
activity?.apply {
requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
}
}
swappingOrientation = false
}
swappingOrientation変数で方向を交換するかどうかに関係なく、情報を保持します。フラグメントが作成される最初の時点で、保存された状態がない場合にのみ、フラグメントは方向を変更します。また、現在変更されていない場合にのみ、方向が元に戻ります。
これは非常に迅速なソリューションであり、前のフラグメントに戻ると画面が点滅する場合があります。また、他の問題が発生する可能性があるため、完全にはテストしていませんので、注意してください。