gpt4 book ai didi

android - 是否可以将 ViewGroups 项目带到 ViewGroups sibling 的前面?

转载 作者:行者123 更新时间:2023-11-29 01:51:45 26 4
gpt4 key购买 nike

我不确定我的问题是否可以理解。我的布局中有一个 Image 和一个 ViewGroupViewGroupGridView 相当,我在其中有可以拖放的项目。现在我有兴趣将我的 ViewGroup 的项目拖到图像上,但每次我尝试时,这些项目似乎都有一个较低的 z-index,因为它消失在图像后面。

我已经在 ViewGroup 及其项上尝试了与 bringToFront 的组合,但没有任何效果。现在我的问题是,是否有可能将 viewgroups 项放在 viewgroups 兄弟项的前面。有没有人有这方面的经验?

我的 xml 看起来像这样,其中 GridView 是我的 Viewgroup...图像资源和图像的可见性在代码中设置:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/relative_gridview_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:tag="@string/tag_fragment_GridView"
android:background="#FFF"
android:orientation="vertical" >

<ImageView
android:id="@+id/img"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:visibility="gone" />


<de.test.GridView
android:id="@+id/grid_view1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/img"
android:background="#FFF"
android:gravity="center"
android:numColumns="auto_fit"
android:stretchMode="none"
android:tag="grid_view_tag" >
</de.test.GridView>

编辑:我使用 BaseAdapter 来显示布局,因为我有动态数量的页面,可以使用此库翻转这些页面 https://github.com/openaphid/android-flip .

我创建的布局如下:

public View loadView(final View view, final int position) {

final GridView dgv = (GridView) view
.findViewById(R.id.grid_view1);


dgv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(android.widget.AdapterView<?> arg0, View v,
int position, long arg3) {

// Simple click listener for the items...



}
});

dgv.getViewTreeObserver().addOnGlobalLayoutListener(
new OnGlobalLayoutListener() {

@Override
public void onGlobalLayout() {
if (Build.VERSION.SDK_INT < 16) {
dgv.getViewTreeObserver()
.removeGlobalOnLayoutListener(this);
} else {
dgv.getViewTreeObserver()
.removeOnGlobalLayoutListener(this);
}

int displayHeight = view.getHeight();
int displayWidth = view.getWidth();


dgv.initChilds(displayWidth, displayHeight,
2,
2);
} else {
mImage = (ImageView) view
.findViewById(R.id.img);
mImage.getLayoutParams().height = displayHeight / 2;

mImage.setImageResource(R.drawable.bild);


dgv.initChilds(displayWidth,
displayHeight / 2, 2,
2);
}

updateGridView();
}

});

mList.add(view);

return view;
}

initChilds() - 方法确定 View 组中每个项目的大小。当通过长按选择时,我想将 View 组项目设置在前面。 longclicklistener 看起来像这样:

@Override
public boolean onLongClick(View view) {

draggedItem = getDraggedView(); draggedItem.bringToFront();
callback.bringGridToFront();

return true;
}

我尝试像这样将项目带到最前面,但它不起作用...回调变量是 baseadapter 类的实例,它调用 bringGridToFront()-方法,当前执行以下代码:

public void bringGridToFront() {
View view = mList.get(mCurrentPage);
RelativeLayout rl = (RelativeLayout) view.findViewById(R.id.relative_gridview_layout);
GridView dgv = (GridView) view.findViewById(R.id.grid_view1);
rl.bringChildToFront(dgv);
}

最佳答案

Android 根据 View 在布局树表中的位置管理 z-index。具有最大索引的 View 将自己绘制在其他 View 之上。在您的布局中,您的自定义网格位于其他网格之上,因为它是布局中的最后一个 View ,因此它获得最大的索引。

在你的代码中我可以看到你在调用

draggedItem = getDraggedView();

在 onLongClick(View view) 事件中。 getDraggedView() 可能会返回一个 View ,该 View 是您正在拖动的 View ,它不会显示在顶部(这只是一个猜测,因为您没有发布 getDraggedView() 代码)。如果是这种情况,您需要知道拖动 View 的父级,例如,如果父级是主窗口,那么您的整个布局将位于它之上。所以我最好的猜测是在您的布局中添加拖动的 View ,因为它将是最后一个 View ,它将位于顶部。

另外我注意到你在打电话

mImage.getLayoutParams().height = displayHeight / 2;

在您的 ImageView 中以更改其高度。我认为这不是正确的方法,因为如果查看 View 的源代码 here在 setLayoutParams 代码所在的第 10130 行,您会看到除了布局参数集之外还发生了一些其他事情。但是我不知道这是否与您的问题有关。

我知道我的答案更像是一个猜测,而不是一个完整的答案,但这是我根据问题的数据所能做的最好的回答。

希望这有助于...

关于android - 是否可以将 ViewGroups 项目带到 ViewGroups sibling 的前面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17549917/

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