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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android ViewBinding使用详解

發布時間:2023/12/16 Android 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android ViewBinding使用详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

View Binding(視圖綁定)

????????視圖綁定是一項功能,可讓你更輕松地編寫與視圖交互的代碼。在模塊中啟用視圖綁定后,它會為該模塊中存在的每個 XML 布局文件生成一個 綁定類。綁定類的實例包含對在相應布局中具有 ID 的所有視圖的直接引用。

????????在大多數情況下,View Binding替換findViewById。

設置

????????視圖綁定在一個模塊一個模塊的基礎上啟用。要在模塊中啟用視圖綁定,請在Modulebuild.gradle文件中將viewBinding構建選項設置為true,如下例所示:

android?{...buildFeatures?{viewBinding?true} }

????????如果你那個布局文件不需要生成綁定類(不想用這個功能),請將該 tools:viewBindingIgnore="true" 屬性添加到該布局文件的根視圖中:

<LinearLayout...tools:viewBindingIgnore="true"?>... </LinearLayout>

使用

????????如果為Module啟用了視圖綁定,則會為Module包含的每個 XML 布局文件生成一個綁定類每個綁定類都包含對根視圖和所有具有 ID 的視圖引用。綁定類的名稱是通過將 XML 文件的名稱轉換為 Pascal 大小寫并在末尾添加Binding一詞來生成的。

????????例如,給定一個名為activity_progressbar.xml的布局文件:

<LinearLayout> ...<ProgressBarandroid:id="@+id/progress_1"/><ProgressBarstyle="@android:style/Widget.ProgressBar.Small"?/><ProgressBarandroid:id="@+id/progress_3"/><ProgressBarstyle="@android:style/Widget.ProgressBar.Inverse"?/><ProgressBarandroid:id="@+id/progress_5"/><ProgressBarstyle="@android:style/Widget.ProgressBar.Large.Inverse"?/> ... </LinearLayout>

????????布局文件中有6個ProgressBar,只有3個ProgressBar設置了android:id。

????????生成的綁定類稱為ActivityProgressbarBinding。這個類有3個字段:progress_1、progress_3、progress_5。另外3個在布局具有沒有ID,所以在綁定類沒有提及。

????????每個綁定類還包含一個getRoot()方法,為相應布局文件的根視圖提供直接引用。在這個例子中,類中的getRoot()方法ActivityProgressbarBinding返回 LinearLayout根視圖。

在Activity中使用視圖綁定

????????要設置用于Activity的綁定類的實例,請在Activity的onCreate()方法中執行以下步驟 :

  • 1.調用inflate()包含在生成的綁定類中的靜態方法。這會為要使用的活動創建綁定類的實例。

  • 2.通過調用getRoot()方法獲取對根視圖的引用。

  • 3.將根視圖傳遞給以 setContentView() 使其成為屏幕上的活動視圖。

????????實例如下:

private?ActivityProgressbarBinding?activityProgressbarBinding;@Overrideprotected?void?onCreate(@Nullable?Bundle?savedInstanceState)?{super.onCreate(savedInstanceState);activityProgressbarBinding?=?ActivityProgressbarBinding.inflate(getLayoutInflater()); //????????View?view?=?activityProgressbarBinding.getRoot(); //????????setContentView(view);//一步到位也可以setContentView(activityProgressbarBinding.getRoot());//使用綁定類的實例來引用任何View(XML中必須添加id)activityProgressbarBinding.progress1.setMax(120);activityProgressbarBinding.progress3.setProgress(20);}

在Fragment中使用視圖綁定

????????要設置與Fragment一起使用的綁定類的實例,請在Fragment的onCreateView()方法中執行以下步驟 :

  • 1.調用inflate()包含在生成的綁定類中的靜態方法。這會為要使用的Fragment創建綁定類的實例。

  • 2.通過調用getRoot()方法獲取對根視圖的引用。

  • 3.從onCreateView()方法返回根視圖,使其成為屏幕上的活動視圖。

注意: 該inflate()方法要求你傳入布局充氣器。如果布局已經inflated,你可以改為調用綁定類的靜態bind()方法。

????????實例如下:

private?FragmentMineBinding?binding; @Override public?View?onCreateView(LayoutInflater?inflater,?ViewGroup?container,?Bundle?savedInstanceState)?{binding?=?FragmentMineBinding.inflate(inflater,container,false);View?view?=?binding.getRoot();return?view; }@Override public?void?onDestroy()?{super.onDestroy();binding?=?null; }

提供不同配置的提示

????????當你跨多個配置聲明視圖時,有時根據特定布局使用不同的視圖類型是有意義的。例如:

#?in?res/layout/example.xml <TextView?android:id="@+id/user_bio"?/>#?in?res/layout-land/example.xml <EditText?android:id="@+id/user_bio"?/>

????????在這種情況下,你可能希望生成的類公開一個userBio type字段TextView,因為TextView是公共基類。不幸的是,由于技術限制,視圖綁定代碼生成器無法做出這個決定,View而是簡單地生成一個字段。這將需要稍后使用binding.userBio as TextView.

????????為了解決這個限制,視圖綁定支持一個tools:viewBindingType 屬性,允許你告訴編譯器在生成的代碼中使用什么類型。在上面的示例中,你可以使用此屬性使編譯器將字段生成為TextView:

#?in?res/layout/example.xml?(unchanged) <TextView?android:id="@+id/user_bio"?/>#?in?res/layout-land/example.xml <EditText?android:id="@+id/user_bio"?tools:viewBindingType="TextView"?/>

????????在另一個示例中,假設你有兩個布局,其中一個包含 BottomNavigationView,另一個包含 NavigationRailView。這兩個類NavigationBarView都包含了大部分實現細節。如果你的代碼不需要確切知道當前布局中存在哪個子類,你可以使用tools:viewBindingType將生成的類型設置為NavigationBarView在兩個布局中:

#?in?res/layout/navigation_example.xml <BottomNavigationView?android:id="@+id/navigation"?tools:viewBindingType="NavigationBarView"?/>#?in?res/layout-w720/navigation_example.xml <NavigationRailView?android:id="@+id/navigation"?tools:viewBindingType="NavigationBarView"?/>

????????注意: 視圖綁定在生成代碼時無法驗證此屬性的值。為避免編譯時和運行時錯誤,該值必須滿足以下條件:

  • 該值必須是繼承自android.view.View的類。

  • 該值必須是放置它的標簽的超類。例如,以下值將不起作用:

<!--?ImageView?is?not?related?to?TextView?-->? <TextView?tools:viewBindingType="ImageView"?/>?<!--?Button?is?not?a?superclass?of?TextView?--> <TextView?tools:viewBindingType="Button"?/>?
  • 最終類型必須在所有配置中一致解析。

與 findViewById 的區別

????????與使用相比,View binding具有重要的優勢findViewById:

  • 空安全:由于視圖綁定創建了對視圖的直接引用,因此不存在因視圖 ID 無效而導致空指針異常的風險。此外,當視圖僅存在于布局的某些配置中時,綁定類中包含其引用的字段會標記為 @Nullable。

  • 類型安全:每個綁定類中的字段的類型與其在 XML 文件中引用的視圖相匹配。這意味著沒有類轉換異常的風險。

????????這些差異意味著你的布局和代碼之間的不兼容性將導致你的構建在編譯時而不是運行時失敗。

與數據綁定的比較

????????View binding和Data Binding都生成可用于直接引用視圖的綁定類。但是,View binding旨在處理更簡單的用例,并提供以下優于Data Binding的好處:

  • 更快的編譯: 視圖綁定不需要注釋處理,因此編譯時間更快。

  • 易用性: 視圖綁定不需要特別標記的 XML 布局文件,因此在您的應用程序中采用它的速度更快。在模塊中啟用視圖綁定后,它會自動應用于該模塊的所有布局。

相反,與數據綁定相比,視圖綁定有以下限制:

  • 視圖綁定不支持布局變量或布局表達式,因此它不能用于直接從 XML 布局文件聲明動態 UI 內容。

布局變量或布局表達式: 表達式語言允許您編寫處理由視圖調度的事件的表達式。數據綁定庫會自動生成將布局中的視圖與數據對象綁定所需的類。

  • 視圖綁定不支持雙向數據綁定。

雙向數據綁定: 單向數據綁定,你可以在屬性上設置一個值并設置一個對該屬性更改做出反應的listener,雙向數據綁定提供了此過程的快捷方式。

????????由于這些考慮,在某些情況下最好在項目中同時使用View Binding和Data Binding。你可以在需要高級功能的布局中使用Data Binding,而在不需要高級功能的布局中使用View Binding。

????????注意: 在很多情況下,視圖綁定可以提供與數據綁定相同的好處,但實現更簡單,性能更好。如果主要用來替換findViewById() 調用,使用視圖綁定更佳。

????????以上就是View Binding(視圖綁定)的全部內容,希望對你有所幫助。以后有條件了咱們再學習一下了Data Binding(數據綁定)。

使用include標簽

1、include 標簽必須設置id(mcv_login)

<includeandroid:id="@+id/mcv_login"layout="@layout/include_login"/>

2、代碼中使用(mcvLogin)

mvcBinding.mcvLogin.tvTitle.setText("MVC");mvcBinding.mcvLogin.btnLogin.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {}});

總結

以上是生活随笔為你收集整理的Android ViewBinding使用详解的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 成人黄色激情小说 | 亚洲一卡二卡三卡四卡 | 六月婷婷综合 | 日韩在线视频一区二区三区 | 呦呦网| 国产在线天堂 | 裸体美女免费视频网站 | 欧美久久精品 | 97国产成人 | 色综合亚洲| 中国老太婆性视频 | 91网站观看 | 亚洲男人的天堂网 | 精品国产丝袜一区二区三区乱码 | 午夜视频免费在线 | 99自拍| 制服丝袜快播 | 国产精品自拍偷拍视频 | 国产情侣一区二区 | 亚洲欧美激情精品一区二区 | 色桃视频| 亚洲精品一级二级 | 国产精品夜夜夜爽阿娇 | 国产理论视频 | 国内精品少妇 | 欧美色哟哟| 99久久婷婷 | 天天躁日日躁aaaaxxxx | 亚洲中文在线一区 | 九九热超碰 | 欧美黄色小说视频 | 国产成人无码一区二区在线观看 | 国产老熟女一区二区三区 | 中文字幕有码在线视频 | 乱xxxxx普通话对白 | 成年人av在线 | 在线免费观看中文字幕 | 久久精品国产亚洲AV熟女 | 国产精品久久久网站 | 美女在线网站 | 中文字幕人妻一区 | 麻豆短视频在线观看 | 亚洲av日韩av在线观看 | 大桥未久在线视频 | 欧美性俱乐部 | 色福利在线 | 狂野欧美性猛交xxxx | 国产视频在线免费观看 | 国产高清精品一区 | 精品国产aⅴ一区二区三区东京热 | 日韩有码中文字幕在线 | 日韩中文字幕影院 | 韩国三级在线看 | 狠狠2020 | 国产精品成人网站 | 日韩av动漫 | 国产伦精品一区二区三区视频孕妇 | 日韩成人在线免费视频 | √资源天堂中文在线视频 | 精品人妻久久久久久888不卡 | 一级黄色大片 | 中文国语毛片高清视频 | 一道本av在线 | 欧美熟妇另类久久久久久多毛 | 山村淫强伦寡妇 | 久久久久久无码午夜精品直播 | 亚洲精品综合久久 | 国产精品播放 | 黄色在线免费观看视频 | 国产亚洲欧美精品久久久久久 | 自拍偷拍第5页 | 久久在线看 | 久久国产精品一区 | 天天舔天天射天天干 | ⅹxxxxhd亚洲日本hd老师 | 成人精品免费在线观看 | 成人免费视频网站在线观看 | 国产91在线视频观看 | 色女人av | 俄罗斯av在线 | 天堂成人 | 精品久久久久久久久中文字幕 | 色婷婷导航 | 香蕉小视频 | 日本韩国欧美中文字幕 | 在线观看日韩国产 | 免费看的一级片 | 91美女片黄在线观看 | 黄色免费一级 | 久久久久久免费毛片精品 | 男人和女人插插 | 中文字幕在线观看 | 噜噜色网 | 先锋影音av资源网 | 午夜精品视频在线 | 免看黄大片aa | 免费毛片观看 | 一区二区成人网 | 黄色片中文字幕 |