安卓开发

安卓自定义注解入门-2-增加通用顶部栏

2020-08-31  本文已影响0人  蓝不蓝编程

目标

熟悉注解的基本使用方法.
本文介绍为普通activity增加一个通用的顶部栏.

主要代码

  1. 定义注解
@kotlin.annotation.Retention(AnnotationRetention.RUNTIME)
@Target(AnnotationTarget.ANNOTATION_CLASS, AnnotationTarget.CLASS)
annotation class TitleBar(val value: String = "")
  1. 增加注解处理类
open class BaseActivity : AppCompatActivity() {

    override fun setContentView(layoutResID: Int) {
        val titleBarAnnotation = javaClass.getAnnotation(TitleBar::class.java)
        if (titleBarAnnotation != null) {
            var linearLayout = LinearLayout(this)
            linearLayout.orientation = LinearLayout.VERTICAL

            addTitleBar(titleBarAnnotation, linearLayout)
            addOriginalView(layoutResID, linearLayout)

            super.setContentView(linearLayout)
        } else {
            super.setContentView(layoutResID)
        }
    }

    private fun addOriginalView(layoutResID: Int, linearLayout: LinearLayout) {
        var params = LinearLayout.LayoutParams(
            LinearLayout.LayoutParams.MATCH_PARENT,
            LinearLayout.LayoutParams.MATCH_PARENT
        )
        var contentView = LayoutInflater.from(this).inflate(layoutResID, null, false)
        linearLayout.addView(contentView, params)
    }

    private fun addTitleBar(titleBarAnnotation: TitleBar, linearLayout: LinearLayout) {
        val textView = TextView(this)
        titleBarAnnotation.value.let { textView.text = it }
        linearLayout.addView(textView)
    }
}
  1. 使用注解
@TitleBar(value = "顶部栏")
class MainActivity : BaseActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }
}

效果图:


完整源代码

https://gitee.com/cxyzy1/annotation-demo

上一篇 下一篇

猜你喜欢

热点阅读