gpt4 book ai didi

android - 用代码替换一个 View

转载 作者:太空狗 更新时间:2023-10-29 15:43:52 26 4
gpt4 key购买 nike


我想用代码替换一个 View
例如,我需要通过代码将 imageview 更改为 progressBar

public void changeToProgressBar(ImageView imageview,Context context){
ProgressBar one = new ProgressBar(context);
one.setLayoutParams(imageview.getLayoutParams());
imageview.setVisibility(View.GONE);
one.setVisibility(View.VISIBLE);

//NOW I NEED TO PLACE 'one' EXACTLY THE PLACE WHERE 'imageview' WAS THERE
}

我需要用到这么多地方。我知道通过发送父 viewgroup 来设置。
无论如何从 imageview
获取父 viewgroup谢谢

最佳答案

这是微不足道的事情,其他张贴者已经链接或暗示了解决方案。您可以通过 View.getParent() 获取 View 的父级。您需要将返回的值转换为 ViewGroup(问:View 的父级可以是 ViewGroup 以外的任何东西吗?)。将父级作为 ViewGroup 后,您可以执行 ViewGroup.removeChild(viewToRemove) 删除旧 View 并使用 ViewGroup.addChild(viewToAdd) 添加新 View 。

您可能还想在与删除 View 相同的索引处添加新 View ,以确保您不会将新 View 放在其他 View 之上或之下。这是一个完整的实用程序类供您使用:

import android.view.View;
import android.view.ViewGroup;

public class ViewGroupUtils {

public static ViewGroup getParent(View view) {
return (ViewGroup)view.getParent();
}

public static void removeView(View view) {
ViewGroup parent = getParent(view);
if(parent != null) {
parent.removeView(view);
}
}

public static void replaceView(View currentView, View newView) {
ViewGroup parent = getParent(currentView);
if(parent == null) {
return;
}
final int index = parent.indexOfChild(currentView);
removeView(currentView);
removeView(newView);
parent.addView(newView, index);
}
}

需要考虑的一点是,当您将一个 View 替换为另一个 View 时,您将丢失相对布局中的任何定位。一种解决方案是确保要替换的 View 包装在另一个 View 中,并且包装的容器 View 是位于相对布局中的 View 。

关于android - 用代码替换一个 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5165799/

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