gpt4 book ai didi

android - OnGlobalLayoutListener : deprecation and compatibility

转载 作者:IT老高 更新时间:2023-10-28 13:13:19 27 4
gpt4 key购买 nike

我必须使用 OnGlobalLayoutListener 对象,然后删除监听器,我遇到了不推荐使用的方法的问题,我使用以下代码解决了这个问题。

protected void onCreate(Bundle savedInstanceState) {
final LinearLayout llTotal = (LinearLayout) findViewById(R.id.mmc_ll);
ViewTreeObserver vto = llTotal.getViewTreeObserver();
if(vto.isAlive()){
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
//
// mycode
//
if (Build.VERSION.SDK_INT<16) {
removeLayoutListenerPre16(llTotal.getViewTreeObserver(),this);
} else {
removeLayoutListenerPost16(llTotal.getViewTreeObserver(), this);
}
}
});
}
super.onCreate(savedInstanceState);
}

@SuppressWarnings("deprecation")
private void removeLayoutListenerPre16(ViewTreeObserver observer, OnGlobalLayoutListener listener){
observer.removeGlobalOnLayoutListener(listener);
}

@TargetApi(16)
private void removeLayoutListenerPost16(ViewTreeObserver observer, OnGlobalLayoutListener listener){
observer.removeOnGlobalLayoutListener(listener);
}

正确吗?有更好的处理兼容性的方法吗?

使用 API 10 在模拟器中运行代码我在 LogCat 中收到以下警告

04-24 09:30:12.565: I/dalvikvm(471): Could not find method android.view.ViewTreeObserver.removeOnGlobalLayoutListener, referenced from method com.my.project.ActivityHome.removeLayoutListenerPost16
04-24 09:30:12.565: W/dalvikvm(471): VFY: unable to resolve virtual method 2950: Landroid/view/ViewTreeObserver;.removeOnGlobalLayoutListener (Landroid/view/ViewTreeObserver$OnGlobalLayoutListener;)V

我可以忽略它们吗?我必须以某种方式修复它们?

最佳答案

我在我的项目中使用它:

@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
public static void removeOnGlobalLayoutListener(View v, ViewTreeObserver.OnGlobalLayoutListener listener){
if (Build.VERSION.SDK_INT < 16) {
v.getViewTreeObserver().removeGlobalOnLayoutListener(listener);
} else {
v.getViewTreeObserver().removeOnGlobalLayoutListener(listener);
}
}

看起来和你的很像。在不同的设备(4.2.2 和 2.3.3)上测试并且运行完美。似乎这是唯一的方法....如果您发现其他任何东西,我想知道它。祝你好运

2020 年编辑这种方法非常非常过时。我希望您将代码移至 Kotlin。现在我们可以在使用 ktx 库时使用 doOnPreDraw 函数。 https://developer.android.com/reference/kotlin/androidx/core/view/package-summary#(android.view.View).doOnPreDraw(kotlin.Function1)

关于android - OnGlobalLayoutListener : deprecation and compatibility,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16189525/

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