最新国产AV资源网_亚洲熟女AV天堂五月天_中文字幕丶东京热_中文字幕乱码免费高清视频

Hi,您好,歡迎來到西安盛圖軟件科技有限公司!

Android 界面布局-LinearLayout

發(fā)布時間:2021-05-14 13:51:34


Android 界面布局-LinearLayout


為了更好地管理Android應(yīng)用的用戶界面里的各組件,Android提供了布局管理器。通過使用布局管理器,Android應(yīng)用圖形用戶界面具有良好的平臺無關(guān)性。推薦使用布局管理器來管理組件的分布、大小,而不是直接設(shè)置組件的位置和大小。可以使用布局管理器嵌套布局管理器,即也可作為一個UI組件來使用。


LinearLayout可以控制組件橫向排列或者縱向排列,內(nèi)容不會換行,超出屏幕部分將不會顯示出來。

01
常用屬性

下面列出幾種之后可能會用到LinearLayout中的屬性,遺忘時查詢即可。

屬性名

意義

orientation

布局方式,有horizontal(水平布局)和vertical(垂直布局)兩種方式

id

組件名稱,方便之后調(diào)用

layout_width

該組件的寬度

layout_height

該組件的高度

layout_weight

權(quán)重

layout_gravity

該組件(在父容器)中的對齊方式

gravity

該組件所含子組件在其內(nèi)部的對齊方式

background

設(shè)置背景圖片或填充顏色

02
orientation屬性示例

orientation屬性有horizontal和vertical兩個參數(shù)供選擇,參數(shù)的值決定了布局方式。

水平布局(horizontal


代碼如下:

<LinearLayout

            android:layout_width="match_parent"

            android:layout_height="match_parent"

            android:orientation="horizontal">

           <TextView

                   android:layout_width="wrap_content"

                   android:layout_height="match_parent"

                   android:gravity="center"

                   android:text="第一個文本框"

                   android:background="#ffff00"/>

          <TextView

                  android:layout_width="wrap_content"

                  android:layout_height="match_parent"

                  android:gravity="center"

                  android:text="第二個文本框"

                  android:background="#ff0000"/>

          <TextView

                  android:layout_width="wrap_content"

                  android:layout_height="match_parent"

                  android:gravity="center"

                  android:text="第三個文本框"

                  android:background="#008000"/>

 </LinearLayout>


垂直布局(vertical

代碼如下:

<LinearLayout

            android:layout_width="match_parent"

            android:layout_height="match_parent"

            android:orientation="vertical">

           <TextView

                    android:layout_width="match_parent"

                    android:layout_height="wrap_content"

                    android:gravity="center"

                    android:text="第一個文本框"

                    android:background="#ffff00"/>

            <TextView

                    android:layout_width="match_parent"

                    android:layout_height="wrap_content"

                    android:gravity="center"

                    android:text="第二個文本框"

                    android:background="#ff0000"/>

            <TextView

                   android:layout_width="match_parent"

                   android:layout_height="wrap_content"

                   android:gravity="center"

                   android:text="第三個文本框"

                   android:background="#008000"/>

</LinearLayout>

03
layout_weight屬性示例

在這之前先簡要說明下match_parent,fill_parent和wrap_content。
match_parent和fill_parent在效果上相同,都是使該組件的寬度或高度填滿父元素,也就是說令其寬度或高度與父元素的寬度或高度一致。
用wrap_content產(chǎn)生的效果由該組件本身的實際情況決定,例如一個TextView組件,它的寬度就是由文本實際的內(nèi)容多少決定的。
回到正題,weight,這里理解為權(quán)重,或是比例,需要注意的是:
水平布局時,按比例分配父元素的寬度(width)
豎直布局時,按比例分配父元素的高度(height)
先看一個例子(以水平布局舉例):

<LinearLayout

        android:layout_width="match_parent"

        android:layout_height="match_parent"

        android:orientation="horizontal">

        <TextView

                android:layout_width="wrap_content"

                android:layout_height="match_parent"

                android:gravity="center"

                android:text="第一個文本框"

                android:layout_weight="1"

                android:background="#ffff00"/>

        <TextView

                android:layout_width="wrap_content"

                android:layout_height="match_parent"

                android:gravity="center"

                android:text="第二個文本框"

                android:layout_weight="1"

                android:background="#ff0000"/>

        <TextView

                android:layout_width="wrap_content"

                android:layout_height="match_parent"

                android:gravity="center"

                android:text="第三個文本框"

                android:layout_weight="1"

                android:background="#008000"/>

</LinearLayout>

還是之前水平布局的例子,只是我們給每個TextView添加了一句android:layout_weight="1"


貌似達(dá)到了我們的預(yù)期,三個TextView按1:1:1分完了總寬度。
但有時候可能無法達(dá)到預(yù)期的效果,請看下面的例子,將三個TextView的android:layout_weight依次設(shè)置為'1','2','3':

可以看出三個文本框的大小不一致了,但是明顯沒有達(dá)到我們預(yù)期的1:2:3的效果。這是因為我們設(shè)置的每個TextView的寬度為wrap_content,每個組件都有本身由text內(nèi)容決定的寬度,只是將剩余的在寬度上的空間按比例分好后再加在其本身的寬度上。

所以說,為達(dá)到真正的比例效果:
水平布局時,將每個組件的寬度(width)設(shè)置為0dp
豎直布局時,將每個組件的高度(height)設(shè)置為0dp

<LinearLayout

        android:layout_width="match_parent"

        android:layout_height="match_parent"

        android:orientation="horizontal">

        <TextView

                android:layout_width="0dp"

                android:layout_height="match_parent"

                android:gravity="center"

                android:text="第一個文本框"

                android:layout_weight="1"

                android:background="#ffff00"/>

        <TextView

                android:layout_width="0dp"

                android:layout_height="match_parent"

                android:gravity="center"

                android:text="第二個文本框"

                android:layout_weight="2"

                android:background="#ff0000"/>

        <TextView

                android:layout_width="0dp"

                android:layout_height="match_parent"

                android:gravity="center"

                android:text="第三個文本框"

                android:layout_weight="3"

                android:background="#008000"/>

</LinearLayout>


04
LinearLayout中動態(tài)創(chuàng)建布局

在現(xiàn)實開發(fā)中有時經(jīng)常會動態(tài)創(chuàng)建布局,并且在布局中添加動態(tài)添加組建來達(dá)到展示目的。下面例子使用button來觸發(fā)單擊事件,然后在單擊事件中動態(tài)廠家一個水平的LinearLayout,并在此中添加文本組建和按鈕組件,最后添加到id為linearTable的垂直LinearLayout中,點(diǎn)擊delete刪除按鈕自動刪除所在行。

頁面代碼如下:

<?xmlversion="1.0"encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayoutxmlns: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=".MainActivity">

      <LinearLayout
             android:layout_width="match_parent"
             android:layout_height="match_parent"
             android:orientation="vertical"
             tools:layout_editor_absoluteX="1dp"
             tools:layout_editor_absoluteY="1dp">

            <Button
                    android:id="@+id/addRow"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="add"
                    android:textAllCaps="false" />

            <ScrollView
                   android:layout_width="match_parent"
                   android:layout_height="180dp">

                   <LinearLayout
                          android:layout_width="match_parent"
                          android:layout_height="wrap_content"
                          android:id="@+id/linearTable"
                          android:orientation="vertical" >
                  </LinearLayout>
           </ScrollView>

     </LinearLayout>

 </androidx.constraintlayout.widget.ConstraintLayout>


Java代碼如下:

packagecom.example.a05_list;

importandroidx.appcompat.app.AppCompatActivity;

importandroid.annotation.SuppressLint;
importandroid.content.Context;
import android.os.Bundle;
importandroid.view.View;
import android.widget.ArrayAdapter;
importandroid.widget.Button;
importandroid.widget.LinearLayout;
importandroid.widget.Spinner;
import android.widget.TextView;
importstatic com.example.a05_list.R.drawable.*;

import staticandroid.widget.LinearLayout.HORIZONTAL;

public classMainActivity extends AppCompatActivity {

   privateButton m_AddRow = null;
   private LinearLayout m_Table =null;
   private Context m_this = null;
   private intm_Count = 0;
   @Override
   protected voidonCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);

       m_AddRow =findViewById(R.id.addRow);
       m_Table =findViewById(R.id.linearTable);
       m_this = this;

      m_AddRow.setOnClickListener(new View.OnClickListener() {
          @Override
           public void onClick(View v) {
              LinearLayout row = new LinearLayout(m_this);
              row.setOrientation(HORIZONTAL);


              TextView textID = new TextView(m_this);
              textID.setText(Integer.toString(m_Count));
              textID.setWidth(80);
               m_Count++;
              TextView text = new TextView(m_this);
              text.setText("test");
              text.setWidth(120);

               Button buttonCmd = newButton(m_this);
               buttonCmd.setText("delete");

              buttonCmd.setOnClickListener(newView.OnClickListener() {
                   @Override
                  public void onClick(View v) {
                      LinearLayout tmp = (LinearLayout) v.getParent();
                      m_Table.removeView(tmp);
                   }
              });
               row.addView(textID);
              row.addView(text);
              row.addView(buttonCmd);
              row.setBackgroundResource(under_line);

              m_Table.addView(row);
           }
       });
  }
}

西安盛圖科技
高端IT培訓(xùn)第一品牌



上一篇:C++應(yīng)該怎么學(xué)
下一篇:基于OpenCV的條形碼檢測

歡迎登錄盛圖科技

歡迎注冊盛圖科技

已有賬號,立即登錄