我们在一个项目上与5人合作。我在Android项目中有自定义TextView组件。我的一些团队朋友直接使用Android TextView(或AppCompatTextView)。我想强制使用我创建的自定义TextView文本视图。我该怎么做?我期待你的帮助,谢谢。
pdsfdshx1#
虽然编码指南和代码评审应该会发现这些问题,但您也可以创建一个自定义的lint检查,并强制您的构建在lint错误时失败。大概是这样的
class TextViewDetector : ResourceXmlDetector() { override fun getApplicableElements(): Collection<String>? { return listOf( "android.widget.TextView", "androidx.appcompat.widget.AppCompatTextView" ) } override fun visitElement(context: XmlContext, element: Element) { context.report( ISSUE, element, context.getLocation(element), "Do not use TextView" ) } companion object { val ISSUE: Issue = Issue.create( "id", "Do not use TextView", "Use custom view", CORRECTNESS, 6, Severity.ERROR, Implementation(TextViewDetector::class.java, RESOURCE_FILE_SCOPE) ) } }
有一个guide,一个来自google的repository示例和一个关于如何编写自定义lint检查的广泛的api guide。
vltsax252#
您可以创建自己的ViewInflater
ViewInflater
class MyViewInflater { fun createView( parent: View?, name: String?, context: Context, attrs: AttributeSet, inheritContext: Boolean, readAndroidTheme: Boolean, readAppTheme: Boolean, wrapContext: Boolean ): View { // ... val view: View = when (name) { "TextView", "androidx.appcompat.widget.AppCompatTextView", "com.google.android.material.textview.MaterialTextView" -> createMyTextView(context, attrs) //other views } //... return view } fun createMyTextView(context: Context, attrs: AttributeSet) = MyTextView(context, attrs) }
并将其安装到应用主题中
<style name="Theme.MyAppTheme" parent="Theme.SomeAppCompatParentTheme"> <item name="viewInflaterClass">package.MyViewInflater</item> </style>
它将返回您指定的所有标记的视图参见AppCompatViewInflater
3ks5zfa03#
没有技术上的方法可以做到这一点,答案是编码指南和代码评审。
3条答案
按热度按时间pdsfdshx1#
虽然编码指南和代码评审应该会发现这些问题,但您也可以创建一个自定义的lint检查,并强制您的构建在lint错误时失败。
大概是这样的
有一个guide,一个来自google的repository示例和一个关于如何编写自定义lint检查的广泛的api guide。
vltsax252#
您可以创建自己的
ViewInflater
并将其安装到应用主题中
它将返回您指定的所有标记的视图
参见AppCompatViewInflater
3ks5zfa03#
没有技术上的方法可以做到这一点,答案是编码指南和代码评审。