利用运行时注解为Activity和Fragment注入布局。
- 在
Application中调用application.registerAutoLayout()进行注册。 - 为activity添加
AutoLayout注解,其中value配置该activity的布局文件ID,autoInject配置为true(默认值为true)。
@AutoLayout(R.layout.activity_auto_layout)
class AutoLayoutExampleActivity : AppCompatActivity()- 为activity添加
AutoLayout注解,其中value配置该activity的布局文件ID。若此时已经启用了自动注入,autoInject需要显式配置为false;若未启用自动注入,autoInject可任意配置。 - 在activity的
onCreate()方法中调用injectAutoLayout()方法。
@AutoLayout(
value = R.layout.activity_manual_layout,
autoInject = false
)
class ManualLayoutExampleActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
injectAutoLayout()
}
}- fragment继承
AutoLayoutFragment。 - 为fragment添加
AutoLayout注解,其中value配置为该fragment的布局文件ID,autoInject可任意配置。
@AutoLayout(R.layout.fragment_auto_layout)
class AutoLayoutExampleFragment : AutoLayoutFragment()重写fragment的onCreateView()方法,直接调用onAutoCreateView()返回或调用getInjectLayoutId()方法获取布局ID自行创建View返回。
@AutoLayout(R.layout.fragment_auto_layout3)
class AutoLayoutExampleFragment3 : Fragment() {
override fun onCreateView(inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?) = onAutoCreateView(inflater, container)
}或
@AutoLayout(R.layout.fragment_auto_layout4)
class AutoLayoutExampleFragment4 : Fragment() {
override fun onCreateView(inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?): View? {
@LayoutRes val layoutId = getInjectLayoutId()
if (layoutId <= 0) {
return null
}
return inflater.inflate(layoutId, container, false)
}
}