āĻ ā§āϝāĻžāύā§āĻĄā§āϰāϝāĻŧā§āĻĄ āĻā§āĻāĻĒā§āϝāĻžāĻā§āϰ āĻŦāĻžāĻāύā§āĻĄāĻŋāĻ āĻ āĻāĻļ āĻĻā§āĻā§āύāĨ¤
āĻāĻŋāĻ āĻŦāĻžāĻāύā§āĻĄāĻŋāĻ āĻāĻŽāύ āĻāĻāĻāĻŋ āĻŦā§āĻļāĻŋāώā§āĻā§āϝ āϝāĻž āĻāĻŋāĻāĻā§āϞāĻŋāϰ āϏāĻžāĻĨā§ āĻāύā§āĻāĻžāϰāĻ ā§āϝāĻžāĻā§āĻ āĻāϰ⧠āĻāĻŽāύ āĻā§āĻĄ āϞā§āĻāĻž āϏāĻšāĻ āĻāϰ⧠āϤā§āϞā§āĨ¤ āĻāĻāĻŦāĻžāϰ āĻāĻāĻāĻŋ āĻŽāĻĄāĻŋāĻāϞ⧠āĻāĻŋāĻ āĻŦāĻžāĻāύā§āĻĄāĻŋāĻ āϏāĻā§āώāĻŽ āĻāϰāĻž āĻšāϞā§, āĻāĻāĻŋ āϏā§āĻ āĻŽāĻĄāĻŋāĻāϞ⧠āĻāĻĒāϏā§āĻĨāĻŋāϤ āĻĒā§āϰāϤāĻŋāĻāĻŋ XML āϞā§āĻāĻāĻ āĻĢāĻžāĻāϞā§āϰ āĻāύā§āϝ āĻāĻāĻāĻŋ āĻŦāĻžāĻāύā§āĻĄāĻŋāĻ āĻā§āϞāĻžāϏ āϤā§āϰāĻŋ āĻāϰā§āĨ¤ āĻāĻāĻāĻŋ āĻŦāĻžāĻāύā§āĻĄāĻŋāĻ āĻā§āϞāĻžāϏā§āϰ āĻāĻāĻāĻŋ āĻāĻĻāĻžāĻšāϰāĻŖā§ āϏāĻāĻļā§āϞāĻŋāώā§āĻ āϞā§āĻāĻāĻā§ āĻāĻāĻāĻŋ āĻāĻāĻĄāĻŋ āĻāĻā§ āĻāĻŽāύ āϏāĻŽāϏā§āϤ āĻĻāϰā§āĻļāύā§āϰ āϏāϰāĻžāϏāϰāĻŋ āĻāϞā§āϞā§āĻ āĻĨāĻžāĻā§āĨ¤
āĻŦā§āĻļāĻŋāϰāĻāĻžāĻ āĻā§āώā§āϤā§āϰā§, āĻāĻŋāĻ āĻŦāĻžāĻāύā§āĻĄāĻŋāĻ findViewById
āĻĒā§āϰāϤāĻŋāϏā§āĻĨāĻžāĻĒāύ āĻāϰā§āĨ¤
āϏā§āĻāĻāĻĒ
āĻŽāĻĄāĻŋāĻāϞ-āĻŦāĻžāĻ-āĻŽāĻĄāĻŋāĻāϞ āĻāĻŋāϤā§āϤāĻŋāϤ⧠āĻāĻŋāĻ āĻŦāĻžāĻāύā§āĻĄāĻŋāĻ āϏāĻā§āώāĻŽ āĻāϰāĻž āĻšāϝāĻŧā§āĻā§āĨ¤ āĻāĻāĻāĻŋ āĻŽāĻĄāĻŋāĻāϞ⧠āĻāĻŋāĻ āĻŦāĻžāĻāύā§āĻĄāĻŋāĻ āϏāĻā§āώāĻŽ āĻāϰāϤā§, āĻŽāĻĄāĻŋāĻāϞ-āϏā§āϤāϰā§āϰ build.gradle
āĻĢāĻžāĻāϞ⧠viewBinding
āĻŦāĻŋāϞā§āĻĄ āĻŦāĻŋāĻāϞā§āĻĒāĻāĻŋāĻā§ true
āĻšāĻŋāϏāĻžāĻŦā§ āϏā§āĻ āĻāϰā§āύ, āϝā§āĻŽāύāĻāĻŋ āύāĻŋāĻŽā§āύāϞāĻŋāĻāĻŋāϤ āĻāĻĻāĻžāĻšāϰāĻŖā§ āĻĻā§āĻāĻžāύ⧠āĻšāϝāĻŧā§āĻā§:
āĻā§āϰā§āĻāĻŋ
android { ... buildFeatures { viewBinding true } }
āĻā§āĻāϞāĻŋāύ
android { ... buildFeatures { viewBinding = true } }
āĻŦāĻžāĻāύā§āĻĄāĻŋāĻ āĻā§āϞāĻžāϏ āϤā§āϰāĻŋ āĻāϰāĻžāϰ āϏāĻŽāϝāĻŧ āϝāĻĻāĻŋ āĻāĻĒāύāĻŋ āĻāĻāĻāĻŋ āϞā§āĻāĻāĻ āĻĢāĻžāĻāϞāĻā§ āĻāĻĒā§āĻā§āώāĻž āĻāϰāϤ⧠āĻāĻžāύ, āϤāĻžāĻšāϞ⧠āϏā§āĻ āϞā§āĻāĻāĻ āĻĢāĻžāĻāϞā§āϰ āϰā§āĻ āĻāĻŋāĻāϤ⧠tools:viewBindingIgnore="true"
āĻ
ā§āϝāĻžāĻā§āϰāĻŋāĻŦāĻŋāĻāĻ āϝā§āĻ āĻāϰā§āύ:
<LinearLayout
...
tools:viewBindingIgnore="true" >
...
</LinearLayout>
āĻŦā§āϝāĻŦāĻšāĻžāϰ
āϝāĻĻāĻŋ āĻāĻāĻāĻŋ āĻŽāĻĄāĻŋāĻāϞā§āϰ āĻāύā§āϝ āĻāĻŋāĻ āĻŦāĻžāĻāύā§āĻĄāĻŋāĻ āϏāĻā§āώāĻŽ āĻāϰāĻž āĻĨāĻžāĻā§, āĻŽāĻĄāĻŋāĻāϞāĻāĻŋāϤ⧠āĻĨāĻžāĻāĻž āĻĒā§āϰāϤāĻŋāĻāĻŋ XML āϞā§āĻāĻāĻ āĻĢāĻžāĻāϞā§āϰ āĻāύā§āϝ āĻāĻāĻāĻŋ āĻŦāĻžāĻāύā§āĻĄāĻŋāĻ āĻā§āϞāĻžāϏ āϤā§āϰāĻŋ āĻāϰāĻž āĻšāϝāĻŧāĨ¤ āĻĒā§āϰāϤāĻŋāĻāĻŋ āĻŦāĻžāĻāύā§āĻĄāĻŋāĻ āĻā§āϞāĻžāϏ⧠āϰā§āĻ āĻāĻŋāĻ āĻāĻŦāĻ āĻāĻāĻĄāĻŋ āĻāĻā§ āĻāĻŽāύ āϏāĻŽāϏā§āϤ āĻāĻŋāĻ āĻāϰ āϰā§āĻĢāĻžāϰā§āύā§āϏ āĻĨāĻžāĻā§āĨ¤ XML āĻĢāĻžāĻāϞā§āϰ āύāĻžāĻŽāĻā§ Pascal āĻā§āϏ⧠āϰā§āĻĒāĻžāύā§āϤāϰ āĻāϰ⧠āĻāĻŦāĻ āĻļā§āώ⧠"Binding" āĻļāĻŦā§āĻĻāĻāĻŋ āϝā§āĻ āĻāϰ⧠āĻŦāĻžāĻāύā§āĻĄāĻŋāĻ āĻā§āϞāĻžāϏā§āϰ āύāĻžāĻŽ āϤā§āϰāĻŋ āĻāϰāĻž āĻšāϝāĻŧāĨ¤
āĻāĻĻāĻžāĻšāϰāĻŖāϏā§āĻŦāϰā§āĻĒ, result_profile.xml
āύāĻžāĻŽāĻ āĻāĻāĻāĻŋ āϞā§āĻāĻāĻ āĻĢāĻžāĻāϞ āĻŦāĻŋāĻŦā§āĻāύāĻž āĻāϰā§āύ āϝāĻžāϤ⧠āύāĻŋāĻŽā§āύāϞāĻŋāĻāĻŋāϤāĻā§āϞāĻŋ āϰāϝāĻŧā§āĻā§:
<LinearLayout ... >
<TextView android:id="@+id/name" />
<ImageView android:cropToPadding="true" />
<Button android:id="@+id/button"
android:background="@drawable/rounded_button" />
</LinearLayout>
āĻā§āĻĒāύā§āύ āĻŦāĻžāĻāύā§āĻĄāĻŋāĻ āĻā§āϞāĻžāϏāĻā§ ResultProfileBinding
āĻŦāϞāĻž āĻšāϝāĻŧāĨ¤ āĻāĻ āĻā§āϞāĻžāϏ⧠āĻĻā§āĻāĻŋ āĻā§āώā§āϤā§āϰ āϰāϝāĻŧā§āĻā§: āĻāĻāĻāĻŋ TextView
name
āĻŦāϞāĻž āĻšāϝāĻŧ āĻāĻŦāĻ āĻāĻāĻāĻŋ Button
āύāĻžāĻŽāĻ button
āĨ¤ āϞā§āĻāĻāĻā§āϰ ImageView
āĻā§āύ⧠ID āύā§āĻ, āϤāĻžāĻ āĻŦāĻžāĻāύā§āĻĄāĻŋāĻ āĻā§āϞāĻžāϏ⧠āĻāϰ āĻā§āύ⧠āϰā§āĻĢāĻžāϰā§āύā§āϏ āύā§āĻāĨ¤
āĻĒā§āϰāϤāĻŋāĻāĻŋ āĻŦāĻžāĻāύā§āĻĄāĻŋāĻ āĻā§āϞāĻžāϏ⧠āĻāĻāĻāĻŋ getRoot()
āĻĒāĻĻā§āϧāϤāĻŋ āĻ
āύā§āϤāϰā§āĻā§āĻā§āϤ āĻĨāĻžāĻā§, āϝāĻž āϏāĻāĻļā§āϞāĻŋāώā§āĻ āϞā§āĻāĻāĻ āĻĢāĻžāĻāϞā§āϰ āϰā§āĻ āĻāĻŋāĻāϝāĻŧā§āϰ āĻāύā§āϝ āϏāϰāĻžāϏāϰāĻŋ āϰā§āĻĢāĻžāϰā§āύā§āϏ āĻĒā§āϰāĻĻāĻžāύ āĻāϰā§āĨ¤ āĻāĻ āĻāĻĻāĻžāĻšāϰāĻŖā§, ResultProfileBinding
āĻā§āϞāĻžāϏ⧠getRoot()
āĻĒāĻĻā§āϧāϤāĻŋ LinearLayout
āϰā§āĻ āĻāĻŋāĻ āĻĒā§āϰāĻĻāĻžāύ āĻāϰā§āĨ¤
āύāĻŋāĻŽā§āύāϞāĻŋāĻāĻŋāϤ āĻŦāĻŋāĻāĻžāĻāĻā§āϞāĻŋ āĻā§āϰāĻŋāϝāĻŧāĻžāĻāϞāĻžāĻĒ āĻāĻŦāĻ āĻāĻŖā§āĻĄāĻā§āϞāĻŋāϤ⧠āĻā§āύāĻžāϰā§āĻ āĻāϰāĻž āĻŦāĻžāĻāϧāĻžāĻ āĻā§āϞāĻžāϏā§āϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻĒā§āϰāĻĻāϰā§āĻļāύ āĻāϰā§āĨ¤
āĻāĻžāϰā§āϝāĻāϞāĻžāĻĒā§ āĻāĻŋāĻ āĻŦāĻžāĻāύā§āĻĄāĻŋāĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύ
āĻāĻāĻāĻŋ āĻāĻžāϰā§āϝāĻāϞāĻžāĻĒā§āϰ āϏāĻžāĻĨā§ āĻŦā§āϝāĻŦāĻšāĻžāϰā§āϰ āĻāύā§āϝ āĻŦāĻžāĻāύā§āĻĄāĻŋāĻ āĻā§āϞāĻžāϏā§āϰ āĻāĻāĻāĻŋ āĻāĻĻāĻžāĻšāϰāĻŖ āϏā§āĻ āĻāĻĒ āĻāϰāϤā§, āĻāĻžāϰā§āϝāĻāϞāĻžāĻĒā§āϰ onCreate()
āĻĒāĻĻā§āϧāϤāĻŋāϤ⧠āύāĻŋāĻŽā§āύāϞāĻŋāĻāĻŋāϤ āĻĒāĻĻāĻā§āώā§āĻĒāĻā§āϞāĻŋ āϏāĻŽā§āĻĒāĻžāĻĻāύ āĻāϰā§āύ:
- āĻā§āύāĻžāϰā§āĻ āĻŦāĻžāĻāύā§āĻĄāĻŋāĻ āĻā§āϞāĻžāϏ⧠āĻ
āύā§āϤāϰā§āĻā§āĻā§āϤ āϏā§āĻā§āϝāĻžāĻāĻŋāĻ
inflate()
āĻĒāĻĻā§āϧāϤāĻŋāĻāĻŋāĻā§ āĻāϞ āĻāϰā§āύāĨ¤ āĻāĻāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻžāϰ āĻāύā§āϝ āĻāĻžāϰā§āϝāĻāϞāĻžāĻĒā§āϰ āĻāύā§āϝ āĻŦāĻžāĻāύā§āĻĄāĻŋāĻ āĻā§āϞāĻžāϏā§āϰ āĻāĻāĻāĻŋ āĻāĻĻāĻžāĻšāϰāĻŖ āϤā§āϰāĻŋ āĻāϰā§āĨ¤ -
getRoot()
āĻĒāĻĻā§āϧāϤāĻŋāϤ⧠āĻāϞ āĻāϰ⧠āĻ āĻĨāĻŦāĻž Kotlin āĻĒā§āϰāĻĒāĻžāϰā§āĻāĻŋ āϏāĻŋāύāĻā§āϝāĻžāĻā§āϏ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āϰā§āĻ āĻāĻŋāĻāϝāĻŧā§āϰ āĻāĻāĻāĻŋ āϰā§āĻĢāĻžāϰā§āύā§āϏ āĻĒāĻžāύāĨ¤ - āϰā§āĻ āĻāĻŋāĻāĻā§
setContentView()
āĻ āĻĒāĻžāϏ āĻāϰā§āύ āϝāĻžāϤ⧠āĻāĻāĻŋ āϏā§āĻā§āϰāĻŋāύ⧠āϏāĻā§āϰāĻŋāϝāĻŧ āĻāĻŋāĻ āĻšāϝāĻŧāĨ¤
āĻāĻ āĻĒāĻĻāĻā§āώā§āĻĒāĻā§āϞāĻŋ āύāĻŋāĻŽā§āύāϞāĻŋāĻāĻŋāϤ āĻāĻĻāĻžāĻšāϰāĻŖā§ āĻĻā§āĻāĻžāύ⧠āĻšāϝāĻŧā§āĻā§:
āĻā§āĻāϞāĻŋāύ
private lateinit var binding: ResultProfileBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ResultProfileBinding.inflate(layoutInflater) val view = binding.root setContentView(view) }
āĻāĻžāĻāĻž
private ResultProfileBinding binding; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); binding = ResultProfileBinding.inflate(getLayoutInflater()); View view = binding.getRoot(); setContentView(view); }
āĻāĻĒāύāĻŋ āĻāĻāύ āϝā§āĻā§āύ āĻŽāϤāĻžāĻŽāϤ āĻāϞā§āϞā§āĻ āĻāϰāϤ⧠āĻŦāĻžāĻāύā§āĻĄāĻŋāĻ āĻā§āϞāĻžāϏā§āϰ āĻāĻĻāĻžāĻšāϰāĻŖ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ:
āĻā§āĻāϞāĻŋāύ
binding.name.text = viewModel.name binding.button.setOnClickListener { viewModel.userClicked() }
āĻāĻžāĻāĻž
binding.name.setText(viewModel.getName()); binding.button.setOnClickListener(new View.OnClickListener() { viewModel.userClicked() });
āĻāĻŖā§āĻĄā§ āĻāĻŋāĻ āĻŦāĻžāĻāύā§āĻĄāĻŋāĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύ
āĻāĻāĻāĻŋ āĻāĻŖā§āĻĄā§āϰ āϏāĻžāĻĨā§ āĻŦā§āϝāĻŦāĻšāĻžāϰā§āϰ āĻāύā§āϝ āĻŦāĻžāĻāύā§āĻĄāĻŋāĻ āĻā§āϞāĻžāϏā§āϰ āĻāĻāĻāĻŋ āĻāĻĻāĻžāĻšāϰāĻŖ āϏā§āĻ āĻāĻĒ āĻāϰāϤā§, āĻāĻŖā§āĻĄā§āϰ onCreateView()
āĻĒāĻĻā§āϧāϤāĻŋāϤ⧠āύāĻŋāĻŽā§āύāϞāĻŋāĻāĻŋāϤ āĻĒāĻĻāĻā§āώā§āĻĒāĻā§āϞāĻŋ āϏāĻŽā§āĻĒāĻžāĻĻāύ āĻāϰā§āύ:
- āĻā§āύāĻžāϰā§āĻ āĻŦāĻžāĻāύā§āĻĄāĻŋāĻ āĻā§āϞāĻžāϏ⧠āĻ
āύā§āϤāϰā§āĻā§āĻā§āϤ āϏā§āĻā§āϝāĻžāĻāĻŋāĻ
inflate()
āĻĒāĻĻā§āϧāϤāĻŋāĻāĻŋāĻā§ āĻāϞ āĻāϰā§āύāĨ¤ āĻāĻāĻŋ āĻĢā§āϰā§āϝāĻžāĻāĻŽā§āύā§āĻ āĻŦā§āϝāĻŦāĻšāĻžāϰā§āϰ āĻāύā§āϝ āĻŦāĻžāĻāύā§āĻĄāĻŋāĻ āĻā§āϞāĻžāϏā§āϰ āĻāĻāĻāĻŋ āĻāĻĻāĻžāĻšāϰāĻŖ āϤā§āϰāĻŋ āĻāϰā§āĨ¤ -
getRoot()
āĻĒāĻĻā§āϧāϤāĻŋāϤ⧠āĻāϞ āĻāϰ⧠āĻ āĻĨāĻŦāĻž Kotlin āĻĒā§āϰāĻĒāĻžāϰā§āĻāĻŋ āϏāĻŋāύāĻā§āϝāĻžāĻā§āϏ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āϰā§āĻ āĻāĻŋāĻāϝāĻŧā§āϰ āĻāĻāĻāĻŋ āϰā§āĻĢāĻžāϰā§āύā§āϏ āĻĒāĻžāύāĨ¤ -
onCreateView()
āĻĒāĻĻā§āϧāϤāĻŋ āĻĨā§āĻā§ āϰā§āĻ āĻāĻŋāĻ āĻĢāĻŋāϰāĻŋāϝāĻŧā§ āĻāύā§āύ āϝāĻžāϤ⧠āĻāĻāĻŋ āϏā§āĻā§āϰāĻŋāύ⧠āϏāĻā§āϰāĻŋāϝāĻŧ āĻāĻŋāĻ āĻšāϝāĻŧāĨ¤
āĻā§āĻāϞāĻŋāύ
private var _binding: ResultProfileBinding? = null // This property is only valid between onCreateView and // onDestroyView. private val binding get() = _binding!! override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { _binding = ResultProfileBinding.inflate(inflater, container, false) val view = binding.root return view } override fun onDestroyView() { super.onDestroyView() _binding = null }
āĻāĻžāĻāĻž
private ResultProfileBinding binding; @Override public View onCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { binding = ResultProfileBinding.inflate(inflater, container, false); View view = binding.getRoot(); return view; } @Override public void onDestroyView() { super.onDestroyView(); binding = null; }
āĻāĻĒāύāĻŋ āĻāĻāύ āϝā§āĻā§āύ āĻŽāϤāĻžāĻŽāϤ āĻāϞā§āϞā§āĻ āĻāϰāϤ⧠āĻŦāĻžāĻāύā§āĻĄāĻŋāĻ āĻā§āϞāĻžāϏā§āϰ āĻāĻĻāĻžāĻšāϰāĻŖ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ:
āĻā§āĻāϞāĻŋāύ
binding.name.text = viewModel.name binding.button.setOnClickListener { viewModel.userClicked() }
āĻāĻžāĻāĻž
binding.name.setText(viewModel.getName()); binding.button.setOnClickListener(new View.OnClickListener() { viewModel.userClicked() });
āĻŦāĻŋāĻāĻŋāύā§āύ āĻāύāĻĢāĻŋāĻāĻžāϰā§āĻļāύā§āϰ āĻāύā§āϝ āĻāĻā§āĻāĻŋāϤ āĻĒā§āϰāĻĻāĻžāύ āĻāϰā§āύ
āĻāĻĒāύāĻŋ āϝāĻāύ āĻāĻāĻžāϧāĻŋāĻ āĻāύāĻĢāĻŋāĻāĻžāϰā§āĻļāύ āĻā§āĻĄāĻŧā§ āĻāĻŋāĻ āĻā§āώāĻŖāĻž āĻāϰā§āύ, āϤāĻāύ āĻŽāĻžāĻā§ āĻŽāĻžāĻā§ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āϞā§āĻāĻāĻā§āϰ āĻāĻĒāϰ āύāĻŋāϰā§āĻāϰ āĻāϰ⧠āĻāĻāĻāĻŋ āĻāĻŋāύā§āύ āĻāĻŋāĻ āĻāĻžāĻāĻĒ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āĻŦā§āϧāĻāĻŽā§āϝ āĻšāϝāĻŧāĨ¤ āύāĻŋāĻŽā§āύāϞāĻŋāĻāĻŋāϤ āĻā§āĻĄ āϏā§āύāĻŋāĻĒā§āĻ āĻāϰ āĻāĻāĻāĻŋ āĻāĻĻāĻžāĻšāϰāĻŖ āĻĻā§āĻāĻžāϝāĻŧ:
# in res/layout/example.xml
<TextView android:id="@+id/user_bio" />
# in res/layout-land/example.xml
<EditText android:id="@+id/user_bio" />
āĻāĻ āĻā§āώā§āϤā§āϰā§, āĻāĻĒāύāĻŋ āĻāĻļāĻž āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ āϝ⧠āϤā§āϰāĻŋ āĻāϰāĻž āĻā§āϞāĻžāϏāĻāĻŋ TextView
āĻāĻžāĻāĻĒā§āϰ āĻāĻāĻāĻŋ āĻĢāĻŋāϞā§āĻĄ userBio
āĻĒā§āϰāĻāĻžāĻļ āĻāϰāĻŦā§, āĻāĻžāϰāĻŖ 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
āĻĒā§āϰāϏāĻžāϰāĻŋāϤ āĻāϰā§, āϝā§āĻāĻŋāϤ⧠āĻŦā§āĻļāĻŋāϰāĻāĻžāĻ āĻŦāĻžāϏā§āϤāĻŦāĻžāϝāĻŧāύā§āϰ āĻŦāĻŋāĻŦāϰāĻŖ āϰāϝāĻŧā§āĻā§āĨ¤ āĻŦāϰā§āϤāĻŽāĻžāύ āϞā§āĻāĻāĻā§ āĻā§āύ āϏāĻžāĻŦāĻā§āϞāĻžāϏāĻāĻŋ āĻāĻĒāϏā§āĻĨāĻŋāϤ āϰāϝāĻŧā§āĻā§ āϤāĻž āϝāĻĻāĻŋ āĻāĻĒāύāĻžāϰ āĻā§āĻĄā§āϰ āϏāĻ āĻŋāĻāĻāĻžāĻŦā§ āĻāĻžāύāĻžāϰ āĻĒā§āϰāϝāĻŧā§āĻāύ āύāĻž āĻšāϝāĻŧ, āϤāĻžāĻšāϞ⧠āĻāĻĒāύāĻŋ āĻāĻāϝāĻŧ āϞā§āĻāĻāĻā§ āĻā§āύāĻžāϰā§āĻ āĻāϰāĻž āĻāĻžāĻāĻĒāĻāĻŋāĻā§ NavigationBarView
āĻ āϏā§āĻ āĻāϰāϤ⧠tools:viewBindingType
āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ:
# 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
āĻĨā§āĻā§ āĻāϤā§āϤāϰāĻžāϧāĻŋāĻāĻžāϰāϏā§āϤā§āϰ⧠āĻĒāĻžāĻāϝāĻŧāĻž āϝāĻžāϝāĻŧāĨ¤ āĻŽāĻžāύāĻāĻŋ āϝ⧠āĻā§āϝāĻžāĻā§āϰ āĻāĻĒāϰ āϏā§āĻĨāĻžāĻĒāύ āĻāϰāĻž āĻšāϝāĻŧā§āĻā§ āϤāĻžāϰ āĻāĻāĻāĻŋ āϏā§āĻĒāĻžāϰāĻā§āϞāĻžāϏ āĻšāϤ⧠āĻšāĻŦā§āĨ¤ āĻāĻĻāĻžāĻšāϰāĻŖāϏā§āĻŦāϰā§āĻĒ, āύāĻŋāĻŽā§āύāϞāĻŋāĻāĻŋāϤ āĻŽāĻžāύāĻā§āϞāĻŋ āĻāĻžāĻ āĻāϰ⧠āύāĻž:
<TextView tools:viewBindingType="ImageView" /> <!-- ImageView is not related to TextView. --> <TextView tools:viewBindingType="Button" /> <!-- Button is not a superclass of TextView. -->
āĻā§āĻĄāĻŧāĻžāύā§āϤ āĻĒā§āϰāĻāĻžāϰāĻāĻŋ āĻ āĻŦāĻļā§āϝāĻ āϏāĻŽāϏā§āϤ āĻāύāĻĢāĻŋāĻāĻžāϰā§āĻļāύ āĻā§āĻĄāĻŧā§ āϧāĻžāϰāĻžāĻŦāĻžāĻšāĻŋāĻāĻāĻžāĻŦā§ āϏāĻŽāĻžāϧāĻžāύ āĻāϰāϤ⧠āĻšāĻŦā§āĨ¤
FindViewById āĻĨā§āĻā§ āĻĒāĻžāϰā§āĻĨāĻā§āϝ
findViewById
āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻāĻŋāĻ āĻŦāĻžāĻāύā§āĻĄāĻŋāĻāϝāĻŧā§āϰ āĻā§āϰā§āϤā§āĻŦāĻĒā§āϰā§āĻŖ āϏā§āĻŦāĻŋāϧāĻž āϰāϝāĻŧā§āĻā§:
- āύāĻžāϞ āύāĻŋāϰāĻžāĻĒāϤā§āϤāĻž: āϝā§āĻšā§āϤ⧠āĻāĻŋāĻ āĻŦāĻžāĻāύā§āĻĄāĻŋāĻ āĻāĻŋāĻāϝāĻŧā§āϰ āϏāϰāĻžāϏāϰāĻŋ āϰā§āĻĢāĻžāϰā§āύā§āϏ āϤā§āϰāĻŋ āĻāϰā§, āϤāĻžāĻ āĻāĻāĻāĻŋ āĻ
āĻŦā§āϧ āĻāĻŋāĻ āĻāĻāĻĄāĻŋāϰ āĻāĻžāϰāĻŖā§ āύāĻžāϞ āĻĒāϝāĻŧā§āύā§āĻāĻžāϰ āĻŦā§āϝāϤāĻŋāĻā§āϰāĻŽ āĻšāĻāϝāĻŧāĻžāϰ āĻā§āĻāĻāĻŋ āύā§āĻāĨ¤ āĻāĻĒāϰāύā§āϤā§, āϝāĻāύ āĻāĻāĻāĻŋ āĻĻā§āĻļā§āϝ āĻļā§āϧā§āĻŽāĻžāϤā§āϰ āĻāĻāĻāĻŋ āϞā§āĻāĻāĻā§āϰ āĻāĻŋāĻā§ āĻāύāĻĢāĻŋāĻāĻžāϰā§āĻļāύ⧠āĻāĻĒāϏā§āĻĨāĻŋāϤ āĻĨāĻžāĻā§, āϤāĻāύ āĻŦāĻžāĻāύā§āĻĄāĻŋāĻ āĻā§āϞāĻžāϏ⧠āĻāϰ āϰā§āĻĢāĻžāϰā§āύā§āϏ āϧāĻžāϰāĻŖāĻāĻžāϰ⧠āĻā§āώā§āϤā§āϰāĻāĻŋ
@Nullable
āĻĻāĻŋāϝāĻŧā§ āĻāĻŋāĻšā§āύāĻŋāϤ āĻāϰāĻž āĻšāϝāĻŧāĨ¤ - āĻāĻžāĻāĻĒ āϏā§āĻĢāĻāĻŋ: āĻĒā§āϰāϤāĻŋāĻāĻŋ āĻŦāĻžāĻāύā§āĻĄāĻŋāĻ āĻā§āϞāĻžāϏā§āϰ āĻā§āώā§āϤā§āϰāĻā§āϞāĻŋāϤ⧠XML āĻĢāĻžāĻāϞ⧠āĻāϞā§āϞā§āĻ āĻāϰāĻž āĻāĻŋāĻāĻā§āϞāĻŋāϰ āϏāĻžāĻĨā§ āĻŽāĻŋāϞ⧠āϝāĻžāϝāĻŧāĨ¤ āĻāϰ āĻŽāĻžāύ⧠āĻā§āϞāĻžāϏ āĻāĻžāϏā§āĻ āĻŦā§āϝāϤāĻŋāĻā§āϰāĻŽā§āϰ āĻā§āύ āĻā§āĻāĻāĻŋ āύā§āĻāĨ¤
āĻāĻ āĻĒāĻžāϰā§āĻĨāĻā§āϝāĻā§āϞāĻŋ āĻāĻĒāύāĻžāϰ āϞā§āĻāĻāĻ āĻāĻŦāĻ āĻāĻĒāύāĻžāϰ āĻā§āĻĄā§āϰ āĻŽāϧā§āϝ⧠āĻ āϏāĻā§āĻāϤāĻŋ āĻŦā§āĻāĻžāϝāĻŧ āϝāĻžāϰ āĻĢāϞ⧠āĻāĻĒāύāĻžāϰ āĻŦāĻŋāϞā§āĻĄ āϰāĻžāύāĻāĻžāĻāĻŽā§āϰ āĻĒāϰāĻŋāĻŦāϰā§āϤ⧠āĻāĻŽā§āĻĒāĻžāĻāϞ āĻāĻžāĻāĻŽā§ āĻŦā§āϝāϰā§āĻĨ āĻšāϝāĻŧāĨ¤
āĻĄā§āĻāĻž āĻŦāĻžāĻāύā§āĻĄāĻŋāĻāϝāĻŧā§āϰ āϏāĻžāĻĨā§ āϤā§āϞāύāĻž
āĻāĻŋāĻ āĻŦāĻžāĻāύā§āĻĄāĻŋāĻ āĻāĻŦāĻ āĻĄā§āĻāĻž āĻŦāĻžāĻāύā§āĻĄāĻŋāĻ āĻāĻāϝāĻŧāĻ āĻŦāĻžāĻāύā§āĻĄāĻŋāĻ āĻā§āϞāĻžāϏ āϤā§āϰāĻŋ āĻāϰ⧠āϝāĻž āĻāĻĒāύāĻŋ āϏāϰāĻžāϏāϰāĻŋ āĻāĻŋāĻ āĻāϞā§āϞā§āĻ āĻāϰāϤ⧠āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύāĨ¤ āϝāĻžāĻāĻšā§āĻ, āĻāĻŋāĻ āĻŦāĻžāĻāύā§āĻĄāĻŋāĻ āϏāĻšāĻ āĻŦā§āϝāĻŦāĻšāĻžāϰā§āϰ āĻā§āώā§āϤā§āϰ⧠āĻĒāϰāĻŋāĻāĻžāϞāύāĻž āĻāϰāĻžāϰ āĻāĻĻā§āĻĻā§āĻļā§āϝ⧠āĻāĻŦāĻ āĻĄā§āĻāĻž āĻŦāĻžāĻāύā§āĻĄāĻŋāĻ āĻāϰ āĻāĻĒāϰ āύāĻŋāĻŽā§āύāϞāĻŋāĻāĻŋāϤ āϏā§āĻŦāĻŋāϧāĻž āĻĒā§āϰāĻĻāĻžāύ āĻāϰā§:
- āĻĻā§āϰā§āϤ āϏāĻāĻāϞāύ: āĻāĻŋāĻ āĻŦāĻžāĻāύā§āĻĄāĻŋāĻāϝāĻŧā§āϰ āĻāύā§āϝ āĻā§āύ āĻā§āĻāĻž āĻĒā§āϰāĻā§āϰāĻŋāϝāĻŧāĻžāĻāϰāĻŖā§āϰ āĻĒā§āϰāϝāĻŧā§āĻāύ āύā§āĻ, āϤāĻžāĻ āĻāĻŽā§āĻĒāĻžāĻāϞā§āϰ āϏāĻŽāϝāĻŧ āĻĻā§āϰā§āϤ āĻšāϝāĻŧāĨ¤
- āĻŦā§āϝāĻŦāĻšāĻžāϰā§āϰ āϏāĻšāĻāϞāĻā§āϝ: āĻāĻŋāĻ āĻŦāĻžāĻāύā§āĻĄāĻŋāĻāϝāĻŧā§āϰ āĻāύā§āϝ āĻŦāĻŋāĻļā§āώāĻāĻžāĻŦā§ āĻā§āϝāĻžāĻ āĻāϰāĻž XML āϞā§āĻāĻāĻ āĻĢāĻžāĻāϞā§āϰ āĻĒā§āϰāϝāĻŧā§āĻāύ āĻšāϝāĻŧ āύāĻž, āϤāĻžāĻ āĻāĻĒāύāĻžāϰ āĻ ā§āϝāĻžāĻĒā§ āĻāĻāĻŋ āĻā§āϰāĻšāĻŖ āĻāϰāĻž āĻāϰāĻ āĻĻā§āϰā§āϤāĨ¤ āĻāĻāĻŦāĻžāϰ āĻāĻĒāύāĻŋ āĻāĻāĻāĻŋ āĻŽāĻĄāĻŋāĻāϞ⧠āĻāĻŋāĻ āĻŦāĻžāĻāύā§āĻĄāĻŋāĻ āϏāĻā§āώāĻŽ āĻāϰāϞā§, āĻāĻāĻŋ āϏā§āĻ āĻŽāĻĄāĻŋāĻāϞā§āϰ āϏāĻŽāϏā§āϤ āϞā§āĻāĻāĻā§ āϏā§āĻŦāϝāĻŧāĻāĻā§āϰāĻŋāϝāĻŧāĻāĻžāĻŦā§ āĻĒā§āϰāϝā§āĻā§āϝ āĻšāϝāĻŧāĨ¤
āĻ āύā§āϝāĻĻāĻŋāĻā§, āĻĄā§āĻāĻž āĻŦāĻžāĻāύā§āĻĄāĻŋāĻāϝāĻŧā§āϰ āϤā§āϞāύāĻžāϝāĻŧ āĻāĻŋāĻ āĻŦāĻžāĻāύā§āĻĄāĻŋāĻāϝāĻŧā§āϰ āύāĻŋāĻŽā§āύāϞāĻŋāĻāĻŋāϤ āϏā§āĻŽāĻžāĻŦāĻĻā§āϧāϤāĻž āϰāϝāĻŧā§āĻā§:
- āĻāĻŋāĻ āĻŦāĻžāĻāύā§āĻĄāĻŋāĻ āϞā§āĻāĻāĻ āĻā§āϰāĻŋāϝāĻŧā§āĻŦāϞ āĻŦāĻž āϞā§āĻāĻāĻ āĻāĻā§āϏāĻĒā§āϰā§āĻļāύ āϏāĻŽāϰā§āĻĨāύ āĻāϰ⧠āύāĻž, āϤāĻžāĻ āĻāĻāĻŋ āϏāϰāĻžāϏāϰāĻŋ XML āϞā§āĻāĻāĻ āĻĢāĻžāĻāϞ āĻĨā§āĻā§ āĻĄāĻžāϝāĻŧāύāĻžāĻŽāĻŋāĻ UI āĻŦāĻŋāώāϝāĻŧāĻŦāϏā§āϤ⧠āĻā§āώāĻŖāĻž āĻāϰāϤ⧠āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āϝāĻžāĻŦā§ āύāĻžāĨ¤
- āĻāĻŋāĻ āĻŦāĻžāĻāύā§āĻĄāĻŋāĻ āĻĻā§āĻŦāĻŋāĻŽā§āĻā§ āĻĄā§āĻāĻž āĻŦāĻžāĻāύā§āĻĄāĻŋāĻ āϏāĻŽāϰā§āĻĨāύ āĻāϰ⧠āύāĻžāĨ¤
āĻāĻ āĻŦāĻŋāĻŦā§āĻāύāĻžāϰ āĻāĻžāϰāĻŖā§, āĻāĻŋāĻā§ āĻā§āώā§āϤā§āϰ⧠āĻāĻāĻāĻŋ āĻĒā§āϰāĻāϞā§āĻĒā§ āĻāĻŋāĻ āĻŦāĻžāĻāύā§āĻĄāĻŋāĻ āĻāĻŦāĻ āĻĄā§āĻāĻž āĻŦāĻžāĻāύā§āĻĄāĻŋāĻ āĻāĻāϝāĻŧāĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āĻāĻžāϞāĨ¤ āĻāĻĒāύāĻŋ āĻāĻŽāύ āϞā§āĻāĻāĻāĻā§āϞāĻŋāϤ⧠āĻĄā§āĻāĻž āĻŦāĻžāĻāύā§āĻĄāĻŋāĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ āϝāĻžāϰ āĻāύā§āϝ āĻāύā§āύāϤ āĻŦā§āĻļāĻŋāώā§āĻā§āϝāĻā§āϞāĻŋāϰ āĻĒā§āϰāϝāĻŧā§āĻāύ āĻšāϝāĻŧ āĻāĻŦāĻ āϝ⧠āϞā§āĻāĻāĻāĻā§āϞāĻŋ āύā§āĻ āϏā§āĻā§āϞāĻŋāϤ⧠āĻāĻŋāĻ āĻŦāĻžāĻāύā§āĻĄāĻŋāĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ⧎
āĻ āϤāĻŋāϰāĻŋāĻā§āϤ āϏāĻŽā§āĻĒāĻĻ
āĻāĻŋāĻ āĻŦāĻžāĻāύā§āĻĄāĻŋāĻ āϏāĻŽā§āĻĒāϰā§āĻā§ āĻāϰāĻ āĻāĻžāύāϤā§, āύāĻŋāĻŽā§āύāϞāĻŋāĻāĻŋāϤ āĻ āϤāĻŋāϰāĻŋāĻā§āϤ āϏāĻāϏā§āĻĨāĻžāύāĻā§āϞāĻŋ āĻĻā§āĻā§āύ:
āĻŦā§āϞāĻ
āĻāĻŋāĻĄāĻŋāĻ
{% āĻļāĻŦā§āĻĻāĻžāϰā§āĻĨā§ %}āĻāĻĒāύāĻžāϰ āĻāύā§āϝ āĻĒā§āϰāϏā§āϤāĻžāĻŦāĻŋāϤ
- āĻĻā§āϰāώā§āĻāĻŦā§āϝ: āĻāĻžāĻāĻžāϏā§āĻā§āϰāĻŋāĻĒā§āĻ āĻŦāύā§āϧ āĻĨāĻžāĻāϞ⧠āϞāĻŋāĻā§āĻ āĻā§āĻā§āϏāĻ āĻĒā§āϰāĻĻāϰā§āĻļāĻŋāϤ āĻšāϝāĻŧ
- āĻā§āĻāϞāĻŋāύ āϏāĻŋāύā§āĻĨā§āĻāĻŋāĻā§āϏ āĻĨā§āĻā§ āĻā§āĻāĻĒā§āϝāĻžāĻ āĻāĻŋāĻ āĻŦāĻžāĻāύā§āĻĄāĻŋāĻ-āĻ āϏā§āĻĨāĻžāύāĻžāύā§āϤāϰ āĻāϰā§āύ
- āϞā§āĻāĻāĻ āĻāĻŦāĻ āĻŦāĻžāĻāύā§āĻĄāĻŋāĻ āĻāĻā§āϏāĻĒā§āϰā§āĻļāύ
- āĻ ā§āϝāĻžāĻĒ āĻāϰā§āĻāĻŋāĻā§āĻāĻāĻžāϰ: UI āϏā§āϤāϰ - āĻļā§āϰ⧠āĻāϰā§āύ - āĻ ā§āϝāĻžāύā§āĻĄā§āϰāϝāĻŧā§āĻĄ āĻŦāĻŋāĻāĻžāĻļāĻāĻžāϰā§āϰāĻžā§ˇ