LinearLayout(susun atur linear)


Pengenalan kepada bahagian ini

Bahagian ini bermula dengan reka letak dalam Android Terdapat enam susun atur utama dalam Android, iaitu: LinearLayout (susun atur linear), RelativeLayout (susun atur relatif), TableLayout (susun atur jadual) FrameLayout (susun atur bingkai), AbsoluteLayout (susun atur mutlak), GridLayout (susun atur grid) Apa yang akan kami jelaskan hari ini ialah susun atur pertama, LinearLayout (susun atur linear), penggunaan penyesuaian skrin kami Yang paling biasa digunakan ialah berat (atribut berat) LinearLayout Dalam bahagian ini, kami akan menganalisisnya secara terperinci. LinearLayout, termasuk beberapa atribut asas, penggunaan atribut Weight dan cara mengira perkadaran, sebagai tambahan Akan menyatakan atribut seterusnya yang kurang digunakan: android:divider melukis garis bawah!


  1. Carta pembelajaran untuk bahagian ini

    1.jpg


2. Penjelasan terperinci tentang atribut berat:

①Penggunaan paling mudah:

Seperti yang ditunjukkan dalam gambar:

2.png

Kod pelaksanaan:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    
    xmlns:tools="http://schemas.android.com/tools"    
    android:id ="@+id/LinearLayout1"    
    android:layout_width="match_parent"    
    android:layout_height="match_parent"    
    android:orientation=";horizontal"&g    
        
    <LinearLayout    
        android:layout_width="0dp"    
                                                                                                                 < gaya/imej/android-tutorial-linearlayout. html"     
         android:layout_weight="1"/>    
       
        
    <LinearLayout    
        android:layout_width="0dp"    
                        android                                android     android:background="../style/images/android-tutorial -linearlayout.html"     
        android:layout_weight="2"/>    
        
</LinearLayout>

Untuk mencapai kesan 1:1 yang pertama, anda hanya perlu menukar pemberat dua LinearLayouts kepada 1 dan 1 masing-masing. Ringkasan penggunaan: Bahagikan arah mendatar secara berkadar: Tetapkan atribut android:width bagi View yang terlibat kepada 0dp, dan kemudian tetapkannya kepada android Atribut berat boleh ditetapkan kepada perkadaran dengan analogi, dalam arah menegak, cuma tetapkan android:height kepada 0dp, dan kemudian tetapkan atribut berat! Anda boleh menulis pembahagian kadaran sama menegak anda sendiri dan mengalami penggunaan yang mudah!

② Penjelasan terperinci tentang atribut berat:

Sudah tentu, jika kami tidak menggunakan kaedah di atas untuk menetapkan 0dp dan menggunakan wrap_content dan match_parent secara langsung, Kemudian anda perlu menghuraikan atribut berat, yang dibahagikan kepada dua situasi, wrap_content dan match_parent! Tonton juga Sama ada orientasi LinearLayout ialah mendatar atau menegak, ini menentukan arah yang hendak dibahagi sama rata.

1) wrap_content agak mudah, hanya berkadar

3.png

Kod pelaksanaan:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    
    xmlns:tools="http://schemas.android.com/tools"    
    android:id ="@+id/LinearLayout1"    
    android:layout_width="match_parent"    
    android:layout_height="match_parent"  
    android:orientation="horizontal" >    
    
    <TextView    
        android:layout_weight="1"    
        android:layout_width="layout_content"  >                                                                                                                         
        android:text="one"     
        android:background="../style/images/android-tutorial-linearlayout.html"    
     />    
     <TextView    
         android:layout_weight="2"    
        android:layout_width="wrap_content"    
                                                              android:text="two"     
        android :background="../style/images/android-tutorial-linearlayout.html"    
     />    
     <TextView    
         android:layout_weight="3"    
        android:layout_width="wrap_content"    
                                                           android:text="tiga"     
        android :background="../style/images/android-tutorial-linearlayout.html"    
     />    
    
</LinearLayout>

2) match_parent(fill_parent): Ini perlu dikira

Mari tulis kod mudah ini:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    
    xmlns:tools="http://schemas.android.com/tools"    
    android:id="@+id/LinearLayout1"    
    android:layout_width="match_parent"    
    android:layout_height="match_parent" >    
    
    <TextView    
        android:layout_weight="1"    
        android:layout_width="fill_parent"    
        android:layout_height="fill_parent"    
        android:text="one"     
        android:background="../style/images/android-tutorial-linearlayout.html"    
     />    
     <TextView    
        android:layout_weight="2"    
        android:layout_width="fill_parent"    
        android:layout_height="fill_parent"    
        android:text="two"     
        android:background="../style/images/android-tutorial-linearlayout.html"    
     />    
     <TextView    
        android:layout_weight="3"    
        android:layout_width="fill_parent"    
        android:layout_height="fill_parent"    
        android:text="three"     
        android:background="../style/images/android-tutorial-linearlayout.html"    
     />    
    
</LinearLayout>

Penyampaian operasi:

4.png

Pada masa ini, anda akan mempunyai soalan, bagaimana ini boleh menjadi nisbahnya ialah 2:1, jadi ke manakah perginya tiga? Ia jelas dalam kod Untuk tiga, 3 juga ditetapkan, dan nisbah 1 dan 2 adalah salah 1:2:3 menjadi 2:1:0. Jawapan: Ia sebenarnya tidak begitu mudah di sini. Kami masih perlu mengiranya. Terdapat beberapa algoritma yang diberikan di Internet Satu yang saya rasa lebih mudah difahami: langkah 1: Semua orang adalah fill_parent, tetapi hanya terdapat satu skrin, kemudian 1 - 3 = - 2 fill_parentlangkah 2: Nisbah pula ialah 1 /6,2/6,3/6langkah 3:Dahulu didahulukan, mula-mula diberikan kepada seorang, pengiraan: 1 - 2 * (1/6) = 2/3 fill_parent ​ ​ Di sebelah dua, hitung: 1 - 2 * (2/6) = 1/3 isian_induk                                                                                                                                                                                                                                               Akhir sekali, hitung 1 - 2 * (3/6) = 0 fill_parentlangkah 4: Jadi keputusan akhir ialah: satu menduduki dua bahagian, dua menduduki satu bahagian, dan tiga tidak mempunyai apa-apa Di atas adalah sebab mengapa tiga tidak muncul Mungkin anda masih keliru selepas membacanya. Mari cuba dengan beberapa contoh lagi.

Nisbah ialah: 1:1:1

5.png

Kira mengikut kaedah pengiraan di atas, hasilnya ialah: 1/3 1/3 1/3, betul

Kemudian mari cuba lagi: 2:3:4

6.png

Keputusan pengiraan: 5/9 3/9 1/9 Membandingkan pemaparan, 5:3:1 adalah betul, jadi anda harus menandakan kaedah pengiraan ini.

③Tetapkan atribut berat dalam kod Java:

setLayoutParams(LayoutParams baharu(LayoutParams.FILL_PARENT,  
     LayoutParams.WRAP_CONTENT, 1));

3. Tetapkan garis pemisah untuk LinearLayout

Dalam banyak pembangunan antara muka, beberapa garis bawah atau garis pemisah ditetapkan untuk menjadikan antara muka lebih kemas dan cantik, seperti Kugou berikut Halaman pendaftaran muzik:

7.jpg

Untuk baris jenis ini, kami biasanya mempunyai dua kaedah ① terus menambah paparan dalam reka letak Fungsi paparan ini hanya untuk memaparkan baris, dan kodnya juga sangat mudah:

<Lihat
android:layout_width="match_parent"
android:layout_height="1px"
android:background="../style/images/android-tutorial-linearlayout.html" />

Ini adalah garis hitam dalam arah mendatar Sudah tentu, anda juga boleh menukarnya kepada warna lain atau menggunakan gambar.

20682772.jpg

②Kaedah kedua ialah menggunakan atribut pembahagi LinearLayout untuk menetapkan terus garis pembahagi untuk LinearLayout. Di sini anda perlu menyediakan gambar garisan sendiri 1) android:divider menetapkan gambar sebagai garis pemisah 2) android:showDividers menetapkan kedudukan garis pemisah, tiada (tiada), permulaan (mula), akhir (akhir), tengah (antara setiap dua komponen) 3)dividerPadding menetapkan Padding bagi garis pemisah

Contoh penggunaan:

8.jpg

Kod pelaksanaan:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    xmlns:tools="http://schemas.android.com/tools"  
    android:id ="@+id/LinearLayout1"  
    android:layout_width="match_parent"  
    android:layout_height="match_parent"  
    android:divider="@drawable/ktv  line_🎜                     android "  
    android:showDividers="middle"  
    android:dividerPadding="10dp"  
    tools:context="com.jay.example.linearlayoutdemo.MainActivity" >  
  
    <Butang  
        android:layout_width="wrap_content"  
        android:layout_height&="wrap_content"  <🎜 :                                                              
  
    <Button  
        android:layout_width="wrap_content"  
        android:layout_height&="wrap_content"  <🎜 text >                                                      
  
    <Butang  
        android:layout_width="wrap_content"  
        android:layout_height&="wrap_content"  <🎜 >                                                                          
  
</LinearLayout>


4. Contoh mudah LinearLayout:

9.jpg

Kod pelaksanaan adalah seperti berikut:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    
    xmlns:tools="http://schemas.android.com/tools"    
    android:id ="@+id/LinearLayout1"    
    android:layout_width="fill_parent"    
    android:layout_height="fill_parent"    
    android:orientation="vertical"     >  <🎜                                                  ... ;    
        
    <TextView    
        android:layout_width="wrap_content"    
                      
        android:layout_width="wrap_content"    
                                                                                                                                                         请输入要保存的电话号码"/>    
    <EditText    
        android:layout_width="fill_parent"    
        android:layout_height="wrap_content"/>    
    <LinearLayout    
        android:layout_width="fill_parent"    
         android:layout_height="wrap_content"                                                          android >        android:gravity="right">    
        <Butang    
             android:layout_width="wrap_content"    
            android:layout_height="            android保存"/>    
        <Butang    
             android:layout_width="wrap_content"    
            android:layout_height="wrap_content"    
            android:text="清空"/>    
    </LinearLayout>    
</LinearLayout>

5. Nota:

Isu yang sangat penting apabila menggunakan Layout_gravity!!! Kandungan soalan: Bagaimana untuk mengatur dua TextViews dalam arah mendatar LinearLayout dan mahu satu kiri dan satu kanan? Mungkin anda akan berkata: "Hanya tetapkan kiri dan kanan untuk graviti!" Adakah ia benar-benar mudah? Adakah anda telah mencubanya? Kodnya adalah seperti berikut:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width ="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
tools:context="com.jay.example.getscreendemo.MainActivity" > <TextView
android:layout_width="wrap_content"
android:layout_height="200dp"
android:layout_gravity="left"
android:background="../style/ images/android- tutorial-linearlayout.html"
android:gravity="center"
android:text="O(∩_∩)Ohaha~" />

<TextView
android : layout_width="wrap_content"
android:layout_height="200dp"
android:layout_gravity="right"
android:background="../style/images/android-tutorial-linearlayout.html"
android:gravity="center"
android:text="(*^__^*) Hee hee..." />

</LinearLayout>

Graf hasil berjalan:

10.jpg

Apabila anda melihat ini, anda akan berkata: Oops, ia benar-benar tidak berfungsi Bagaimana dengan menambah atribut gravity=left pada LinearLayout luar, dan kemudian menetapkan yang kedua? Layout_gravity TextView betul, mari cuba:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width ="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:gravity="left"
tools:context="com.jay.example.getscreendemo. MainActivity" >

<TextView
android:layout_width="wrap_content"
android:layout_height="200dp"
android:background="../ style/images/android- tutorial-linearlayout.html"
android:gravity="center"
android:text="O(∩_∩)Ohaha~" />

<TextView
android : layout_width="wrap_content"
android:layout_height="200dp"
android:layout_gravity="right"
android:background="../style/images/android-tutorial-linearlayout.html"
android:gravity="center"
android:text="(*^__^*) Hee hee..." />

</LinearLayout>

Hasilnya masih sama:

12.jpg

Baiklah, saya sudah habis akal, apa yang perlu saya lakukan?

Apabila android:orientation="vertical" digunakan, hanya tetapan mendatar akan berkuat kuasa dan tetapan menegak tidak. Iaitu: kiri, kanan, center_horizontal adalah sah. Apabila android:orientation="horizontal" digunakan, hanya tetapan menegak berkuat kuasa dan tetapan mendatar tidak. Iaitu: atas, bawah, tengah_menegak adalah sah.

Walau bagaimanapun, kaedah ini nampaknya tidak berguna. contohnya: Jika anda hanya boleh menetapkan penjajaran kiri dan kanan dalam arah menegak, kesan berikut akan muncul:

13.jpg

Ini jelas bukan hasil yang kita mahukan! Secara ringkasnya, sama ada susun atur mengikut peraturan yang diberikan di atas, tetapi dalam kes ini, gunakan reka letak relatif RelativeLayout! Tidak ada alasan khusus yang diberikan di Internet. Mereka semua mengatakan bahawa ini adalah perubahan. , mari kita tandainya sekarang, dan saya akan menerangkannya kemudian jika saya tahu sebabnya Seperti yang saya nyatakan sebelum ini tentang penyesuaian skrin, reka letak masih disyorkan. RelativeLayout!