buz*_*ert 4 android android-layout
我创建了一个非常小的库来更改我的应用程序的字体。
到目前为止,我一直在膨胀布局之后以及在将 TextView 添加到我的布局之后更改字体。它有效,但我必须记住对我的布局中涉及TextView. 这对于大型项目和我的代码的长期维护来说是不可持续的。
我想要一种方法来监听布局的变化,Activity以便我可以在那里进行字体更改。
我尝试ViewGroup.OnHierarchyChangeListener在我Activity这样的实现上:
@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);
}
Run Code Online (Sandbox Code Playgroud)
这似乎是一个很好的解决方案,因为我可以聆听onChildViewAdded(View parent, View child)并获得对View添加到我的ViewGroup. 唯一的问题是,这种获取viewGroup的方式不包括ActionBar,而只需向其中添加相同的侦听器ActionBar就足够了。
但是,onChildViewAdded永远不会被调用。
我主要Fragment在 myActivity的布局内进行交易。我不知道这是否是阻止回调发生的原因。
我现在正在尝试ViewTreeObserver.OnDrawListener,这是要走的路还是有另一种解决方法来侦听 a 中的更改ViewGroup?
小智 6
该view.setOnHierarchyChangeListener()只给出意见时加入这一观点明确你的回调。当您向此视图的子视图添加视图时,您不会收到任何回调。您将需要单独聆听它们。
查看https://gist.github.com/JakeWharton/7189309上的代码:
每当向此添加视图时,将侦听器附加到所有 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));
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1275 次 |
| 最近记录: |