gpt4 book ai didi

android - 监听 ViewGroup 的变化

转载 作者:搜寻专家 更新时间:2023-11-01 08:33:46 26 4
gpt4 key购买 nike

我创建了一个非常小的库来更改我的应用程序的字体。

到目前为止,我一直在扩充布局后以及将 TextView 添加到我的布局后更改字体。它有效,但我必须记住对我的布局中涉及 TextView 的每个更改执行此操作。这对于大型项目和我的代码的长期维护来说是不可持续的。

我想要一种方法来监听 Activity 中布局的变化,这样我就可以在那里进行字体更改。

我尝试在我的 Activity 上实现 ViewGroup.OnHierarchyChangeListener,如下所示:

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ViewGroup viewGroup = (ViewGroup) ((ViewGroup) this
.findViewById(android.R.id.content)).getChildAt(0);
viewGroup.setOnHierarchyChangeListener(this);
}

这似乎是一个很好的解决方案,因为我可以收听 onChildViewAdded(View parent, View child) 并获得对添加到我的 中的任何 View 的引用> View 组。唯一的问题是,这种获取 viewGroup 的方式不包括 ActionBar,但只需将相同的监听器添加到 ActionBar 就足够了。

但是,永远不会调用 onChildViewAdded

我主要在 Activity 的布局中执行 Fragment 事务。我不知道这是否是阻止回调发生的原因。

我现在正在尝试使用 ViewTreeObserver.OnDrawListener ,这是要走的路还是有另一种解决方法来监听 ViewGroup 中的变化?

最佳答案

view.setOnHierarchyChangeListener() 仅在 View 专门添加到此 View 时为您提供回调。当您向该 View 的 subview 添加 View 时,您不会收到任何回调。您需要单独聆听它们。

查看 https://gist.github.com/JakeWharton/7189309 处的代码:

每当向其中添加一个 View 时,都会为所有 ViewGroup 类型的子级附加一个监听器以更改层次结构。

监听器中的这段代码演示了这个想法:

@Override public void onChildViewAdded(View parent, View child) {
delegate.onChildViewAdded(parent, child);

if (child instanceof ViewGroup) {
ViewGroup childGroup = (ViewGroup) child;
childGroup.setOnHierarchyChangeListener(this);
for (int i = 0; i < childGroup.getChildCount(); i++) {
onChildViewAdded(childGroup, childGroup.getChildAt(i));
}
}
}

关于android - 监听 ViewGroup 的变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38364263/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com