初探ViewBinding
視圖訪問的方式有常用的findViewById,ButterKnife等多種方式,這些方式的各方面對比如下
如上圖所示,在簡明、編譯安全和編譯速度上都各有優勢,那么有沒有一種方式可以一石?"三"?鳥呢。谷歌在Android Studio 3.6 Canary 11版本中正式推出視圖綁定(View Binding),來看下使用方法,
首先需要使用AS 3.6 Canary 11之上的版本,這里我們使用AS 3.6 Beta 1(也可以使用最新的AS 4.0 Canary 01),升級gradle plugin版本到3.6.0 beta01
buildscript {……dependencies {classpath "com.android.tools.build:gradle:3.6.0-beta01"} }然后在app中開啟viewbinding
apply plugin: 'com.android.application'android {……defaultConfig {……viewBinding {enabled = true}}…… }接下來新建一個布局文件activity_view_binding,內容如下
<?xml version="1.0" encoding="utf-8"?> <android.support.constraint.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"><TextViewandroid:id="@+id/text"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_margin="10dp"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent"tools:text="111" /><android.support.v7.widget.AppCompatImageViewandroid:id="@+id/image"android:layout_width="0dp"android:layout_height="0dp"android:layout_margin="10dp"app:layout_constraintDimensionRatio="1:1"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@id/text"app:layout_constraintWidth_percent="0.4" /> </android.support.constraint.ConstraintLayout>然后在Activity等需要使用布局的類中進行ViewBinding的初始化及使用,如下
public class ViewBindingActivity extends AppCompatActivity {private ActivityViewBindingBinding viewBinding;@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);viewBinding = ActivityViewBindingBinding.inflate(LayoutInflater.from(this));setContentView(viewBinding.getRoot());viewBinding.text.setText("view binding");viewBinding.image.setImageResource(R.color.black);} }ViewBinding的初始化有三種方式,
inflate(@NonNull LayoutInflater inflater); inflate(@NonNull LayoutInflater inflater, @Nullable ViewGroup parent, boolean attachToParent); bind(@NonNull View rootView);ViewBinding不用再手動進行類型轉換,也避免了空指針錯誤。如果不想生成ViewBinding,可以在布局的根視圖上使用tools:viewBindingIgnore="true"。
當然ViewBinding現在還是測試階段,也有很多問題,例如tools:viewBindingIgnore有時會無效;如果你的布局名稱比較長的時候,生成的ViewBinding類也比較長,沒有自定義生成ViewBinding類名稱的方式;視圖id比較長的時候,生成的對象名稱也比較長。
在Butterknife的github主頁上也有這樣一段話,
Attention: Development on this tool is winding down. Please consider switching to view binding in the coming months.看來JakeWharton還是比較推薦自家的ViewBinding,大家可以開始嘗試使用,如果有問題可以進行反饋,相信ViewBinding也會越來越強大。
總結
以上是生活随笔為你收集整理的初探ViewBinding的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Dubbo整合Nacos
- 下一篇: 【精品,面试之前必读】【转贴】安氏大俗商