/AutoLayout

利用运行时注解为Activity和Fragment注入布局

Primary LanguageKotlin

AutoLayout

利用运行时注解为ActivityFragment注入布局。

Activity

自动注入

  1. Application中调用application.registerAutoLayout()进行注册。
  2. 为activity添加AutoLayout注解,其中value配置该activity的布局文件ID,autoInject配置为true(默认值为true)。
@AutoLayout(R.layout.activity_auto_layout)
class AutoLayoutExampleActivity : AppCompatActivity()

手动注入

  1. 为activity添加AutoLayout注解,其中value配置该activity的布局文件ID。若此时已经启用了自动注入,autoInject需要显式配置为false;若未启用自动注入,autoInject可任意配置。
  2. 在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

自动注入

  1. fragment继承AutoLayoutFragment
  2. 为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)
    }
}