拦截每个视图元素被膨胀?

我试图拦截在我的活动中正在充气的每个视图窗口小部件,并覆盖该视图的setText功能(如果存在)。

所以,如果一个TextView在XML布局中有一个android:text =“bla”,我希望能够截取这个,并且可能会在xml中设置的所有文本的末尾添加一个**。

似乎接近我需要的一种方法是使用自定义布局充气器。

LayoutInflaterCompat.setFactory(layoutInflator, InflatorOnSteriods(this)) 

并在我的InflatorOnSteriods重写onCreateView,然后拦截所有视图..这种方法似乎并没有工作。 onCreateView永远不会被调用。

我也试过使用cloneInContext

  LayoutInflaterCompat.setFactory(layoutInflater.cloneInContext(this), InflatorOnSteriods(this)) 

但是也没有运气,也许我的方法是完全错误的,我也打开了一个不同的方式,我可以截取所有呈现的视图,并具体设置一个特定的观点。 确保我将是最后一个改变视图并确保系统尊重我的更改并且不会在以后覆盖它们是非常重要的。

更新:

虽然我不认为它相关; 代码InflatorOnSteroids.kt

 class InflatorOnSteriods(val appCompatActivity: AppCompatActivity) : LayoutInflaterFactory { override fun onCreateView(parent: View, name: String, context: Context, attrs: AttributeSet): View { var result: View if (TextUtils.equals(name, "DebugDrawerLayout")) { result = ImageView(context, attrs) } result = appCompatActivity.onCreateView(name, context, attrs) if (result == null) { // Get themed views from app compat result = appCompatActivity.delegate.createView(parent, name, context, attrs) } return result } } 

经过一段时间解决我的解决方案后,我终于实现了我想要的充气机工厂解决方案。

首先我创建一个抽象的活动,它有一个定制的充气器。

 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和父视图可以为空:)

开心编程

很好的参考可以在这里找到