レイアウト内にレイアウトを含める方法は?


回答:


193

編集:ここに正しくリクエストされたコメントのように、いくつかの詳細情報。includeタグを使う

<include
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   layout="@layout/yourlayout" />

再利用するレイアウトを含めます。

このリンクをチェックしてください...


11
ほんの細部:android:layout_width = "fill_parent"の代わりにandroid:layout_width = "match_parent"を使用してください。fill_parentは非推奨です。
トリニティ

1
レイアウトを含め、xmlを介してそのプロパティの一部を設定できますか。たとえば、<include>タグのサブレイアウトにテキスト文字列を直接設定できますか?
JohnyTex

@JohnyTex <include />タグで直接実行できるかどうかはわかりませんが、Javaコードを使用して実行できます。以下のPhileo99の回答を参照してくださいれたレイアウトへの参照を取得する方法については、。内容を変更できます。
モーセ

56

あなたが含まれている場合ことに注意してくださいandroid:id...<include />、タグ、それが含まれるレイアウト内で定義されたものは何でもIDオーバーライドします。例えば:

<include
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:id="@+id/some_id_if_needed"
   layout="@layout/yourlayout" />

yourlayout.xml:

<LinearLayout
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:id="@+id/some_other_id">
   <Button
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       android:id="@+id/button1" />
 </LinearLayout>

次に、このインクルードされたレイアウトを次のようにコードで参照します。

View includedLayout = findViewById(R.id.some_id_if_needed);
Button insideTheIncludedLayout = (Button)includedLayout.findViewById(R.id.button1);


6

これを試して

<include
            android:id="@+id/OnlineOffline"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            layout="@layout/YourLayoutName" />

2

レイアウトの再利用に関する公式ドキュメントから

Androidには、小さく再利用可能なインタラクティブ要素を提供するためのさまざまなウィジェットが用意されていますが、特別なレイアウトが必要な大きなコンポーネントを再利用する必要がある場合もあります。完全なレイアウトを効率的に再利用するために、タグを使用して現在のレイアウト内に別のレイアウトを埋め込むことができます。

これは、includeタグを使用して再利用できるheader.xmlファイルです

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#FFFFFF"
    >


    <TextView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:gravity="center"
        android:text="@string/app_name"
        android:textColor="#000000" />

</RelativeLayout>

いいえ、使用しません タグをXMLに追加して、別のXMLファイルから別のレイアウトを追加します。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#f0f0f0" >


    <include
        android:id="@+id/header_VIEW"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        layout="@layout/header" />

        <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        android:background="#ffffff"
        android:orientation="vertical"
        android:padding="5dp" >


    </LinearLayout>

TextViewをルートビューではなくRelativeLayoutに配置する理由
Florian Walther

@FlorianWaltherこれは例です
IntelliJ

迅速な対応に感謝致します。しかし、TextViewをルート要素として配置することはできるのでしょうか、それとも何か不足していますか?ProgressBarを再利用して、レイアウトに配置する必要があるかどうかを考えたいからです。
Florian Walther

@FlorianWalther Because I want to reuse a ProgressBarどんな問題が来るの?
IntelliJ Amiya 2018年

問題はありませんが、動作します。しかし、私がオンラインで見るすべての例は、単一のウィジェットを別のレイアウトに配置し、その理由を知りたいと思います。
Florian Walther

0

詳細このリンクの使用 https://developer.android.com/training/improving-layouts/reusing-layouts.html

    <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".Game_logic">
    
          
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal">
    
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="5dp"
                    android:id="@+id/text1"
                    android:textStyle="bold"
                    tools:text="Player " />
    
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textStyle="bold"
                    android:layout_marginLeft="20dp"
    
                    android:id="@+id/text2"
                    tools:text="Player 2" />
          
            
          
        </LinearLayout>
    </androidx.constraintlayout.widget.ConstraintLayout>

ブロッククォート

  • 上記のレイアウトを使用して、他のアクティビティで使用できます

     <?xml version="1.0" encoding="utf-8"?><androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
                      xmlns:app="http://schemas.android.com/apk/res-auto"
                      xmlns:tools="http://schemas.android.com/tools"
                      android:layout_width="match_parent"
                      android:layout_height="match_parent"
                      tools:context=".SinglePlayer">   
    
              <include layout="@layout/activity_game_logic"/> 
          </androidx.constraintlayout.widget.ConstraintLayout>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.