Jak dołączyć układ do układu?


Odpowiedzi:


198

Edycja: Jak w komentarzu, który słusznie poprosił o więcej informacji. Użyj includetagu

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

aby uwzględnić układ, którego chcesz ponownie użyć.

Sprawdź ten link ...


11
tylko mały szczegół: użyj android: layout_width = "match_parent" zamiast android: layout_width = "fill_parent". fill_parent jest przestarzały.
Trinity

1
Czy mogę dołączyć układ i ustawić niektóre jego właściwości poprzez xml, np. Ustawić ciąg tekstowy w układzie podrzędnym bezpośrednio w tagu <include>?
JohnyTex

@JohnyTex Nie jestem pewien, czy możesz to zrobić bezpośrednio w <include />tagu, jednak możesz to zrobić za pomocą kodu java. zobacz odpowiedź Phileo99 poniżej, aby dowiedzieć się, jak uzyskać odniesienie do dołączonego układu. a potem możesz zmienić jego zawartość.
Mojżesz

58

Zauważ, że jeśli umieścisz android:id...w <include />tagu, nadpisuje on każdy identyfikator zdefiniowany w dołączonym układzie. Na przykład:

<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>

Następnie możesz odwołać się do tego zawartego układu w kodzie w następujący sposób:

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


6

Spróbuj tego

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

3

Z oficjalnych dokumentów o ponownym użyciu układów

Chociaż system Android oferuje różnorodne widżety zapewniające małe i wielokrotnego użytku elementy interaktywne, może być konieczne ponowne użycie większych komponentów, które wymagają specjalnego układu. Aby efektywnie ponownie wykorzystać kompletne układy, możesz użyć znacznika do osadzenia innego układu w bieżącym układzie.

Oto mój plik header.xml , którego mogę użyć ponownie za pomocą tagu include

<?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>

Nie, używam tag w XML, aby dodać kolejny układ z innego pliku 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>

Po co umieszczać TextView w RelativeLayout, a nie jako widok główny?
Florian Walther

@FlorianWalther To jest przykład
IntelliJ Amiya

Dziękuję za szybką odpowiedź. Ale czy mam rację, że mogłem umieścić TextView jako element główny, czy czegoś mi brakuje? Ponieważ chcę ponownie użyć ProgressBar i zastanawiam się, czy muszę umieścić go w układzie.
Florian Walther

@FlorianWalther Because I want to reuse a ProgressBarjaki problem nadchodzi?
IntelliJ Amiya

Nie ma problemu, to działa. Ale wszystkie przykłady, które widzę online, umieszczają pojedynczy widżet w innym układzie i zastanawiam się, dlaczego.
Florian Walther

0

Dowiedz się więcej, korzystając z tego linku 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>

Zablokować cytat

  • Powyższy układ możesz wykorzystać w innej aktywności za pomocą

     <?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>
    
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.