Java 拦截每个正在充气的视图元素?
我试图截获活动中正在膨胀的每个视图小部件,并覆盖该视图的setText功能(如果存在)Java 拦截每个正在充气的视图元素?,java,android,view,kotlin,layout-inflater,Java,Android,View,Kotlin,Layout Inflater,我试图截获活动中正在膨胀的每个视图小部件,并覆盖该视图的setText功能(如果存在) 因此,如果一个TextView在XML布局中有一个android:text=“bla”,我希望能够截取它,并可能在从XML设置的所有文本的末尾添加一个** 一种方法,似乎接近我需要的是使用自定义布局充气机 LayoutInflaterCompat.setFactory(layoutInflator, InflatorOnSteriods(this)) 我的充气器中的命令覆盖onCreateView,然后拦
因此,如果一个TextView在XML布局中有一个android:text=“bla”,我希望能够截取它,并可能在从XML设置的所有文本的末尾添加一个** 一种方法,似乎接近我需要的是使用自定义布局充气机
LayoutInflaterCompat.setFactory(layoutInflator, InflatorOnSteriods(this))
我的充气器中的命令覆盖onCreateView,然后拦截那里的所有视图。。这种方法似乎根本不起作用。永远不会调用onCreateView
我还尝试使用克隆文本
LayoutInflaterCompat.setFactory(layoutInflater.cloneInContext(this), InflatorOnSteriods(this))
但也不走运,也许我的方法是完全错误的。我也愿意接受一种不同的方式,在这种方式下,我可以截取所有呈现的视图,具体地说,在该视图上设置某个属性。确保我是最后一个更改该视图的人,并确保系统尊重我的更改,并且以后不会覆盖这些更改,这一点非常重要
更新:
虽然我不认为这有什么关系;充气器甾体代码.kt
在对我的解决方案进行了一段时间的故障排除后,我终于用充气机工厂解决方案实现了我想要的 首先,我创建一个抽象活动,其中设置了一个自定义充气器
abstract class SteroidsActivity : AppCompatActivity() {
var mInflater: LayoutInflater? = null
abstract fun getActivityLayout(): Int
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
mInflater = layoutInflater?.cloneInContext(this)
LayoutInflaterCompat.setFactory(mInflater, InflaterOnSteroids(this))
setContentView(getActivityLayout())
}
override fun getLayoutInflater(): LayoutInflater? {
return mInflater
}
override fun getSystemService(name: String): Any? {
if (name == LAYOUT_INFLATER_SERVICE) {
if (mInflater == null) {
mInflater = super.getSystemService(name) as LayoutInflater
}
return mInflater
}
return super.getSystemService(name)
}
}
第二件事,你需要做的是创建您的自定义充气工厂
class InflaterOnSteroids(appCompatActivity1: AppCompatActivity) : LayoutInflaterFactory {
override fun onCreateView(parent: View?, name: String, context: Context, attrs: AttributeSet): View? {
//Do stuff here and return a view
return null
}
}
我的代码的问题是,它总是会因一个奇怪的错误而崩溃,直到我意识到我需要在视图后添加一个?,因为我使用的是kotlin,父视图可以为null:)
快乐编程
可以找到很好的参考资料你能在你的问题中添加
InflatorOnSteriods
类代码吗?我添加了代码@petey,尽管类现在在那里什么都不做。。。所以我认为这不是问题所在。。我的问题更多的是,即使是正确的方法,因为它可能不是。“因此,如果TextView在XML布局中有一个android:text=“bla”,我希望能够截取它,并可能在从XML设置的所有文本的末尾添加一个**。”这是在哪里发生的?(还有,你使用kotlin真是太好了)@petey你还会用什么;)哈哈,你是什么意思?发生在哪里?我的计划是确保我有一个钩子点,我可以截取包含文本属性的每个视图,然后操纵该文本。如果我需要进一步澄清,请告诉我。
class InflaterOnSteroids(appCompatActivity1: AppCompatActivity) : LayoutInflaterFactory {
override fun onCreateView(parent: View?, name: String, context: Context, attrs: AttributeSet): View? {
//Do stuff here and return a view
return null
}
}