日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【JetPack】ViewBinding 视图绑定组件 ( 启用模块 | 视图绑定定制 | 绑定类名称生成规则 | 绑定类字段生成规则 | 绑定类获取根视图 | 绑定类获取布局组件 )

發布時間:2025/6/17 编程问答 31 豆豆

文章目錄

        • I . 視圖綁定組件簡介
        • II . 視圖綁定 ViewBinding 使用前提 ( Android Studio 3.6 )
        • III . 視圖綁定組件啟用
        • IV . 定制視圖綁定 ( 啟用視圖綁定后 不想生成綁定類 )
        • V . 視圖綁定布局文件
        • VI . 綁定類名稱生成規則
        • VII . 綁定類對應的布局中的組件字段生成規則
        • VIII . 視圖綁定類獲取
        • IX . 設置視圖綁定后的布局
        • X . 獲取視圖綁定類組件
        • XI . 視圖綁定對應 Java 示例代碼
        • XII . 應用運行結果
        • XIII . GitHub 代碼地址



I . 視圖綁定組件簡介



Activity 獲取布局組件方式 : 在之前的 Activity 代碼中 , 使用 findViewById ( ) 方法 , 或者 Butter Knife 的 @BindView 注解方式獲取 Layout 布局中的組件對象 ;


視圖綁定 ( ViewBinding ) 是 Google 退出的新的獲取布局組件的方式 , 顧名思義 , 其作用就是將 Layout 布局中的 View 組件綁定在 Activity 等界面的 Java / Kotlin 代碼中 , 可以在代碼中獲取這些組件對象 ;



II . 視圖綁定 ViewBinding 使用前提 ( Android Studio 3.6 )



1 . Android Studio 最低版本要求 : 使用視圖綁定組件 , 需要將 Android Studio 開發環境升級到 3.6 Canary 11 及以上版本 ;


2 . 當前最新穩定版本 : 目前 2020/03/23 最新穩定版本是 3.6.1 , 建議升級到該版本 , 不推薦使用 4.0 或 4.1 BETA 版本 ;


估計大部分開發者都需要升級 Android Studio 版本到 3.6 以上 , 這里給簡單的出升級流程 , 以作參考 ; ( 大概需要 10 分鐘左右 )


3 . Android Studio 升級流程 : 盡量使用 Android Studio 自帶的升級功能 , 這樣能盡量少的降低對之前應用的影響 ;


① 選擇 Android Studio 自帶升級選項 : 選擇菜單欄 , Help -> Check for Updates … , 彈出下面的對話框 , 選擇 Update and Restart 選項 ;


② 等待下載更新 : 等待下載 , 下載完畢后會自動安裝應用 ;


③ 刪除舊版本的相關目錄 : 為了避免影響新版本 Android Studio 開發環境運行 , 刪除舊版本的相關文件 ;


④ 新版本自動啟動 :



III . 視圖綁定組件啟用



啟用視圖綁定模塊 : 在 Module 中的 build.gradle 構建腳本中的 android 下 , 配置如下內容 :

viewBinding {enabled = true }



IV . 定制視圖綁定 ( 啟用視圖綁定后 不想生成綁定類 )



全部布局默認進行視圖綁定 : 只要在 build.gradle 中啟用了 視圖綁定 , 那么系統會默認為每個 XML 布局文件生成一個綁定類 ;


定制不生成綁定類的情況 : 在布局根標簽中配置 tools:viewBindingIgnore=“true” 屬性 , 即不為該布局生成綁定類 ;



V . 視圖綁定布局文件



下面的綁定類定義了三個 TextView , 前兩個定義了 id 分別是 text_view text_view2 , 最后一個沒有定義 id ;

該布局作為視圖綁定的示例布局 , 下面的內容都以該布局為基礎講解 ;


activity_main.xml

<?xml version="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"><TextViewandroid:id="@+id/text_view"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Hello World 1!"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toRightOf="parent"app:layout_constraintTop_toTopOf="parent"app:layout_constraintVertical_bias="0.3" /><TextViewandroid:id="@+id/text_view2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Hello World 2!"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toRightOf="parent"app:layout_constraintTop_toTopOf="parent"app:layout_constraintVertical_bias="0.5"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Hello World 3!"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toRightOf="parent"app:layout_constraintTop_toTopOf="parent"app:layout_constraintVertical_bias="0.7"/></androidx.constraintlayout.widget.ConstraintLayout>

VI . 綁定類名稱生成規則



視圖綁定類名稱生成規則 : 去掉布局文件名稱的下劃線 , 并以駝峰式命名 , 在名稱結尾添加 Binding 后綴 ;


以本 Activity 的布局文件 activity_main.xml 為例 , 刪除中間的下劃線 , Activity 和 Main 首字母大寫 , 在后面添加 Binding 后綴 , 生成的綁定類名稱為 ActivityMainBinding ;



VII . 綁定類對應的布局中的組件字段生成規則



1 . 綁定類組件成員名稱生成規則 : 組件中的字段也是按照駝峰式命名生成 , 首字母小節 , 中間的字母首字母大寫 , 如 id 是 text_view , 生成的成員變量名稱是 textView ;

1 . 生成的綁定類字段 : 只要在布局文件中定義了 id 屬性的組件 , 綁定類中就會為該組件生成相應的字段 ;


① 綁定類字段對應布局 ID : activity_main.xml 布局文件中 , 第一個和第二個 TextView 都定義了 id 分別是 text_view 和 text_view2 ;

② 綁定類生成的字段 : 那么系統會在 ActivityMainBinding 中生成 TextView textView 和 TextView textView2 兩個字段 ;

③ 綁定類組件字段訪問 : 通過 ActivityMainBinding 對象可以直接訪問這兩個組件 ;


2 . 不生成字段 : 第三個 TextView 沒有定義 id 屬性 , ActivityMainBinding 中不會生成該組件對應的字段 ;



VIII . 視圖綁定類獲取



activity_main.xml 布局生成的綁定類為 ActivityMainBinding , 可調用 inflate 方法 , 獲取該綁定類對象 , 需要傳遞 LayoutInflater 參數 , 可以直接調用 Activity 的 getLayoutInflater() 方法獲取 ;


/*** 視圖綁定類 對象* binding 中可以獲取布局文件中定義的* text_view 和 text_view2 兩個 TextView 組**/ private ActivityMainBinding binding;/*獲取 視圖綁定 對象生成綁定類 : 需要傳遞 LayoutInflater 參數 ,可以直接調用 Activity 的 getLayoutInflater() 方法獲取*/ binding = ActivityMainBinding.inflate(getLayoutInflater());

IX . 設置視圖綁定后的布局



1 . 獲取根視圖 : ActivityMainBinding 綁定類自帶 getRoot() 方法 , 可以直接獲取到 布局文件的 根視圖 ;

2 . 設置 Activity 視圖 : 這里可以直接將根視圖傳遞給 setContentView 函數作為參數 , 即可在該 Activity 中顯示該布局 ;


/*ActivityMainBinding 綁定類自帶 getRoot() 方法可以直接獲取到 布局文件的 根視圖這里可以直接將根視圖傳遞給 setContentView 函數作為參數 , 即可在該 Activity 中顯示該布局*/ setContentView(binding.getRoot());

X . 獲取視圖綁定類組件



可以直接通過 視圖綁定類 ActivityMainBinding 對象 binding 獲取對應的組件 , 組件名稱就是布局文件中定義的組件 id ;

//binding 中可以直接通過組件 id 獲取對應的組件 binding.textView.setText("ActivityMainBinding 1"); binding.textView2.setText("ActivityMainBinding 2");

XI . 視圖綁定對應 Java 示例代碼



package kim.hsl.vb;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle; import android.widget.TextView;import kim.hsl.vb.databinding.ActivityMainBinding;/**** 視圖綁定 ( ViewBinding ) 只綁定布局文件中定義了 id 屬性的組件* 那些沒有定義 id 屬性的組件不綁定** 只要在 build.gradle 中啟用了 視圖綁定 ,* 那么系統會默認為每個 XML 布局文件生成一個綁定類 ;* ( 可以在布局中設置 tools:viewBindingIgnore="true" 不生成綁定類 )*** 視圖綁定類生成規則 : 去掉布局文件名稱的下劃線 , 并以駝峰式命名 , 在名稱結尾添加 Binding 后綴 ;* 以本 Activity 的布局文件 activity_main.xml 為例 :* 刪除中間的下劃線 , Activity 和 Main 首字母大寫 , 在后面添加 Binding 后綴* 生成的綁定類名稱為 ActivityMainBinding** 生成的綁定類字段 : 只要在布局文件中定義了 id 屬性的組件 , 綁定類中就會為該組件生成相應的字段* 如 :** 生成字段 : activity_main.xml 布局文件中 , 第一個和第二個 TextView 都定義了 id 分別是* text_view 和 text_view2 ,* 那么系統會在 ActivityMainBinding 中生成 TextView text_view 和 TextView text_view2 兩個字段* 通過 ActivityMainBinding 對象可以直接訪問這兩個組件** 不生成字段 : 第三個 TextView 沒有定義 id 屬性 , ActivityMainBinding 中不會生成該組件對應的字段*** 不生成綁定類的情況 : 在布局根標簽中配置 tools:viewBindingIgnore="true" 屬性 , 即不為該布局生成綁定類*** 視圖綁定 與 findViewById 對比 : 避免了很多問題出現 ;* 空指針優化 : 視圖綁定 針對一個布局進行自動生成字段 , 不會出現 ID 無效導致的空指針情況 ;* 類型安全優化 : 視圖綁定 的類型都是自動生成好的 , 不會出現用戶自己定義類型 , 導致組件類型轉換錯誤的情況 ;**/ public class MainActivity extends AppCompatActivity {/*** 視圖綁定類 對象* binding 中可以獲取布局文件中定義的* text_view 和 text_view2 兩個 TextView 組件**/private ActivityMainBinding binding;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);/*獲取 視圖綁定 對象生成綁定類 : 需要傳遞 LayoutInflater 參數 ,可以直接調用 Activity 的 getLayoutInflater() 方法獲取*/binding = ActivityMainBinding.inflate(getLayoutInflater());/*ActivityMainBinding 綁定類自帶 getRoot() 方法可以直接獲取到 布局文件的 根視圖這里可以直接將根視圖傳遞給 setContentView 函數作為參數 , 即可在該 Activity 中顯示該布局*/setContentView(binding.getRoot());//binding 中可以直接通過組件 id 獲取對應的組件binding.textView.setText("ActivityMainBinding 1");binding.textView2.setText("ActivityMainBinding 2");} }

XII . 應用運行結果



APP 運行結果 : 可以看到通過綁定類獲取 TextView , 設置其文字 , 分別為 ActivityMainBinding 1 和 ActivityMainBinding 2 已經設置成功 , 說明視圖綁定操作完成 ;



XIII . GitHub 代碼地址



GitHub 代碼地址 : https://github.com/han1202012/001_JetPack_ViewBinding

總結

以上是生活随笔為你收集整理的【JetPack】ViewBinding 视图绑定组件 ( 启用模块 | 视图绑定定制 | 绑定类名称生成规则 | 绑定类字段生成规则 | 绑定类获取根视图 | 绑定类获取布局组件 )的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。