Android控制UI界面


⒈使用XML布局文件控制UI界面【推薦】

  Android推薦使用XML布局文件來控制視圖,這樣不僅簡單、明了,而且可以將應用的視圖控制邏輯從Java或Kotlin代碼中分離出來,放入XML文件中控制,從而更好的體現MVC原則。

  Android把用戶界面放在XML文檔中定義,就可以讓XML文檔專門負責用戶UI設置,而Java程序則專門負責業務實現,這樣可以降低程序的耦合性。

  當我們在Android應用的\res\layout目錄下定義一個主文件名任意的XML布局文件之后(R.java會自動收錄該布局資源),java或Kotlin代碼可通過以下方法在Activity中顯示該視圖。

setContentView(R.layout.資源文件名稱)

  當在布局文件中添加多個UI組件時,都可以為該UI組件指定android:id屬性,該屬性的屬性值代表該組件的唯一標識。接下來如果希望在Java或Kotlin代碼中訪問指定的UI組件,則可通過如下代碼來實現。

findViewById(R.id.屬性值)

  一旦在程序中獲得到了指定的UI組件之后,接下載就可以通過代碼來控制各UI組件的外觀行為,包括為UI組件綁定事件監聽器等。

⒉在代碼中控制UI界面【不推薦】

  Android推薦使用XML布局文件來控制UI界面,Android也支持使用代碼控制UI界面,只需將UI組件創建出來並以合適的方式組合在一起。

 1 package com.example.myapplication;
 2 
 3 import androidx.appcompat.app.AppCompatActivity;
 4 
 5 import android.os.Bundle;
 6 import android.view.ViewGroup;
 7 import android.widget.Button;
 8 import android.widget.LinearLayout;
 9 import android.widget.TextView;
10 
11 public class MainActivity extends AppCompatActivity {
12 
13     //當第一次創建該Activity時回調該方法
14     @Override
15     protected void onCreate(Bundle savedInstanceState) {
16         super.onCreate(savedInstanceState);
17         //創建一個線性布局管理器
18         LinearLayout layout = new LinearLayout(this);
19         //設置該Activity顯示layout
20         setContentView(layout);
21         layout.setOrientation(LinearLayout.VERTICAL);
22         //創建一個TextView
23         TextView show = new TextView(this);
24         //創建一個Button
25         Button bn = new Button(this);
26         bn.setText("單擊我");
27         bn.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT));
28         //向layout容器中添加TextView
29         layout.addView(show);
30         //向layout容器中添加Button
31         layout.addView(bn);
32         //為按鈕綁定一個事件監聽器
33         bn.setOnClickListener((view) -> {
34             show.setText("Hello World!");
35         });
36     }
37 }

**上面代碼使用JDK 8的Lambda表達式,需要對項目做以下更改以支持JDK 8

**創建UI組件時需要傳入一個Context參數,可以讓UI組件通過該Context參數獲取Android應用環境的全面信息。Context本身是一個抽象類,Android中的Activity、Service都繼承了Context,因此Activity、Service都可以直接作為Context使用,本例中直接傳入當前實例this即可。

⒊使用XML布局文件和代碼混合控制UI界面

  完全利用XML布局文件來控制UI雖然方便、便捷,但難免有失靈活。

  完全使用Java代碼來控制UI界面不僅繁瑣,而且不利用解耦。

  因此很多時候需要混合使用XML布局文件和代碼來控制UI界面。

  當混合使用XML布局文件和代碼來控制UI界面時,習慣上把變化小、行為比較固定的組件放在XML布局文件中管理,而那些變化較多、行為控制比較復雜的組件則交給代碼來管理。

 

<?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=".MainActivity">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/show"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="164dp"
        android:layout_marginBottom="288dp"
        android:text="單擊我"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="1.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="1.0" />

</androidx.constraintlayout.widget.ConstraintLayout>
 1 package com.example.myapplication;
 2 
 3 import androidx.appcompat.app.AppCompatActivity;
 4 
 5 import android.os.Bundle;
 6 import android.widget.Button;
 7 
 8 public class MainActivity extends AppCompatActivity {
 9 
10     //當第一次創建該Activity時回調該方法
11     @Override
12     protected void onCreate(Bundle savedInstanceState) {
13         super.onCreate(savedInstanceState);
14         //設置該Activity顯示activity_main.xml文件定義的View
15         setContentView(R.layout.activity_main);
16         Button bn = findViewById(R.id.show);
17         bn.setOnClickListener(view -> {
18             bn.setText("Hello");
19         });
20     }
21 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM