縦向きと横向きに異なるレイアウトを指定するにはどうすればよいですか?


142

アクティビティ用に2つの個別のレイアウトxmlファイルを指定できることへの言及を見てきました。1つはポートレート用、もう1つはランドスケープ用です。私はそれを行う方法についての情報を見つけるために行ったことはありません。アクティビティごとに、どのxmlファイルがポートレートレイアウトで、どちらがランドスケープレイアウトかを指定するにはどうすればよいですか?

画面サイズごとに異なるレイアウトを指定することもできますか?もしそうなら、これはどのように行われますか?

回答:


203

layout-landディレクトリを作成し、レイアウトXMLファイルの横長バージョンをそのディレクトリに配置します。


3
これは、すべてのアクティビティで横向きと縦向きの両方のビューを定義する必要があることを意味しますか?
ジェイアスクレン

20
いいえ、レイアウトランドの定義が存在しない場合は、標準のレイアウトディレクトリにあるXMLレイアウトのみを使用します。
マークB

私の場合、android:configChanges = "orientation | keyboardHidden | screenSize"を使用しているときに、layout-landが機能していません
Tushar Pandey 14

9
android:configChanges = "orientation | keyboardHidden | screenSize"から方向を削除
Ushal Naidoo

60

向きと解像度に応じて名前が異なる別のフォルダーに配置するだけで、デバイスが画面設定に適したものを自動的に選択します

詳細はこちら:

http://developer.android.com/guide/practices/screens_support.html

「画面サイズと密度のリソースディレクトリ修飾子」の下


OSバージョン1.6以降でのみ機能します。あなたは1.5をサポートしたい場合は、このリンクを必要とする: developer.android.com/guide/practices/screens-support-1.5.htmlを
スコット・ビッグス

2
@Silvio Donnini-リンクには必要な情報がありません。
itsaboutcode、2012

2
@itsaboutcodeはい、あります。「構成修飾子の使用」に
進み

27

マウス愛好家のために!「resources」フォルダーを右クリックしてAdd new resource file、「Available qualifiers」から次を選択しますorientation

ここに画像の説明を入力してください


ただし、サブフォルダー「layout-land」を次のように追加して、手動で行うこともできます。

「Your-Project-Directory \ app \ src \ main \ res」

それ以降、このサブフォルダーの下にあるすべてのlayout.xmlファイルは、自動的に横モードでのみ機能します

ポートレートモードの場合は「layout-port」を使用します。


1
これでうまくいきました。指示に従って、縦向きバージョンと同じ名前で新しいレイアウトファイルを追加しました。Android Studioは、そのレイアウト用のフォルダーを自動的に作成しました。縦向きのレイアウトと横向きのレイアウト。画面を回転すると、新しいレイアウトが自動的に表示されます。
Smitty-Werben-Jager-Manjenson

23

ただのリマインダー:

マニフェストファイルでアクティビティの属性を定義している場合は、削除orientationandroid:configChangesますxml

android:configChanges="orientation|screenLayout|screenSize"

1
私のマニフェストにandroid:configChanges = "orientation | screenLayout | screenSize"を含める必要がある場合はどうすればよいですか。一部のフラグメントは両方の方向にある場合とそうでない場合がありますが、それらのフラグメントの横と縦に個別のレイアウトが必要です。方向を動的に変更できますか?
natansalda

9

Android Studio 3.xxおよびAndroid Studio 4.xxの最速の方法

1.アクティビティレイアウトのデザインタブに移動します

2.上部にある[プレビューの向き]ボタンを押す必要があります。横向きのレイアウトを作成するオプションがあります(画像を確認)。その特定の向きのxmlレイアウトファイルとして新しいフォルダーが作成されます

ここに画像の説明を入力してください


4

Androidの最新バージョンで最も簡単な方法は、XMLではなく(テキストではなく)デザインモードにすることだと思います。

次に、メニューからオプションを選択します-ランドスケープバリエーションの作成。これにより、数秒で手間のかからないランドスケープxmlが作成されます。最新のAndroid Studioバージョンでは、すぐに横向きのビューを作成できます。

ここに画像の説明を入力してください

これがうまくいくことを願っています。


3

新しいディレクトリを作成しlayout-land、その後、作成xml中に同じ名前のファイルを layout-land、それがあったようにlayout、ディレクトリや風景モードのためにそこにあなたのコンテンツを揃えます。

両方のコンテンツのID xmlは同じであることに注意してください。


3

下の最後の行は、横長と最小幅(600dp)画面の2つの数量詞を適用する例です。600dpを必要なものに更新します。

res/layout/main_activity.xml                # For handsets
res/layout-land/main_activity.xml           # For handsets in landscape
res/layout-sw600dp/main_activity.xml        # For 7” tablets
res/layout-sw600dp-land/main_activity.xml   # For 7” tablets in landscape

上記は、寸法にも適用されます

res/values/dimens.xml                # For handsets
res/values-land/dimens.xml           # For handsets in landscape
res/values-sw600dp/dimens.xml        # For 7” tablets
res/values-sw600dp-land/dimens.xml   # For 7” tablets in landscape

有用なデバイスメトリック:https : //material.io/tools/devices/


2

またはこれを使用してください:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
            android:scrollbars="vertical" 
            android:layout_height="wrap_content" 
            android:layout_width="fill_parent">

  <LinearLayout android:orientation="vertical"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent">

     <!-- Add your UI elements inside the inner most linear layout -->

  </LinearLayout>
</ScrollView>

0
  1. resフォルダーを右クリックし、
  2. 新規-> Androidリソースファイル
  3. 「使用可能な修飾子」で、「向き」を選択します。
  4. 選択した修飾子に追加
  5. 画面の向きで、横を選択します
  6. OKを押します

Android Studio 3.4.1を使用すると、layout-landフォルダーが作成されなくなります。フォルダを作成し、2つのレイアウトファイルを1つにまとめます。

ここに画像の説明を入力してください


2
不正解です。フォルダ表示モード(「プロジェクト」など)を使用していません。スクリーンショットのように仮想フォルダー内のファイルをグループ化する「Android」ビューモードを使用している可能性がありますが、実際のフォルダー構造は、他のすべての投稿で説明されているとおりです。
monK_
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.