Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 拦截每个正在充气的视图元素?_Java_Android_View_Kotlin_Layout Inflater - Fatal编程技术网

Java 拦截每个正在充气的视图元素?

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,然后拦

我试图截获活动中正在膨胀的每个视图小部件,并覆盖该视图的setText功能(如果存在)


因此,如果一个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
       }
 }