??一、配置說明??
??作用位置??
需在模塊級?
build.gradle
或?build.gradle.kts
文件的?android {}
塊內添加:android {buildFeatures {viewBinding = true // Kotlin DSL 語法} }
android {buildFeatures {viewBinding true // Groovy 語法} }
??生成規則??
為每個 XML 布局文件(如?
activity_main.xml
)生成對應的綁定類(如?ActivityMainBinding
)。綁定類包含布局中所有帶?
android:id
的視圖引用,無需手動調用?findViewById()
。
??忽略特定布局??
若無需為某布局生成綁定類,可在其根節點添加:
<LinearLayout...tools:viewBindingIgnore="true">
</LinearLayout>
二、使用示例??
??1. Activity 中綁定視圖?
class MainActivity : AppCompatActivity() {private lateinit var binding: ActivityMainBindingoverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)binding = ActivityMainBinding.inflate(layoutInflater)setContentView(binding.root) // 設置根視圖// 直接訪問視圖(類型安全 & 空安全)binding.textView.text = "Hello, View Binding!"binding.button.setOnClickListener { Toast.makeText(this, "Clicked", Toast.LENGTH_SHORT).show()}}
}
2. Fragment 中綁定視圖(避免內存泄漏)?
class ExampleFragment : Fragment() {private var _binding: FragmentExampleBinding? = nullprivate val binding get() = _binding!! // 非空斷言override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {_binding = FragmentExampleBinding.inflate(inflater, container, false)return binding.root}override fun onViewCreated(view: View, savedInstanceState: Bundle?) {binding.textView.text = "Fragment Loaded"}override fun onDestroyView() {super.onDestroyView()_binding = null // 釋放視圖引用}
}
三、核心優勢??
??特性?? | ??說明?? |
---|---|
??類型安全?? | 自動推斷視圖類型(如? |
??空安全?? | 僅綁定布局中聲明? |
??性能優化?? | 編譯時生成代碼,無運行時反射開銷,比? |
??代碼簡潔?? | 一行綁定代替多次? |
五、與 DataBinding 對比??
??特性?? | View Binding | Data Binding |
---|---|---|
??視圖綁定?? | ? | ? |
??數據綁定?? | ? | ?(支持? |
??雙向綁定?? | ? | ? |
??性能開銷?? | ?? 接近零開銷 | ?? 較高(需處理表達式邏輯) |
??適用場景?? | 純 UI 操作 | 數據驅動 UI(如 MVVM 架構) |