如何发送视图回来? 如何以编程方式控制z顺序?

我有问题发送视图回来。 在Android中,我们有一个像bringToFront()这样的方法,将视图置于另一个视图之上。 就像那样,我想把视图放在之前的图像下面。

在Android中有没有像sendToBack()bringToBack() 。 如果是这样,任何人都可以帮助我。

注意:我不想通过在布局中放置项目的顺序来控制Z顺序我想通过编程方式控制Z顺序。

我不想隐藏在前面的意见,我只是希望他们背后的移动视图。

Afaik没有内置的解决scheme。 我想你正在尝试修改FrameLayout中的z顺序,或类似的东西。

不过,我认为你可以修改布局中包含的子元素的顺序。 RemoveChild …()和addView()方法可以采取位置值,所以你可能很可能交换周围的子元素,这将修改z顺序。 这似乎有点哈克解决scheme。

或者考虑修改子视图的可见性属性,你可能会得到类似的行为,而且我认为这会更清晰。

编辑:

随着新的Android版本,L开发人员预览看来,最后我们有能力轻松改变视图的Zsorting。 'Elevation'和'TranslationZ'属性来拯救: https : //developer.android.com/preview/material/views-shadows.html

我意识到这已经暗示在其他答案,但没有人张贴的代码。 我将以下内容保存在一个实用程序类中,我有用于处理视图的“帮助”函数:

 public static void sendViewToBack(final View child) { final ViewGroup parent = (ViewGroup)child.getParent(); if (null != parent) { parent.removeView(child); parent.addView(child, 0); } } 

没有sendToBack()方法。 但是,如果您在位于较低位置的视图上调用bringToFront() ,则可以获得几乎相同的效果。

在你想要获得的视图上调用bringToFront()方法,然后在所有视图上调用invalidate()方法,包括你想在前面的视图。 对所有听众重复相同的操作。

所以当另一个视图的侦听器被调用时,之前的视图将会失效,并将在后台。

这里是我用来发送视图到后面的方法(与bringToFront类似,sendToBacktypes):

  private void moveToBack(View myCurrentView) { ViewGroup myViewGroup = ((ViewGroup) myCurrentView.getParent()); int index = myViewGroup.indexOfChild(myCurrentView); for(int i = 0; i<index; i++) { myViewGroup.bringChildToFront(myViewGroup.getChildAt(i)); } } 

希望这可以帮助!

请注意,您可以从API级别21开始使用view.setZ(float) 。 在这里您可以find更多信息。

您也可以尝试使用ViewGroup.addViewInLayout()方法的function,该function采用索引,确定视图应该在列表的最后还是列表的开始

你可以尝试做view.setVisibility(View.INVISIBLE)view.setVisibility(View.GONE)

更新:

这告诉你如何完成你想要做的事情。

我要么将其可见性设置为0,要么将其视图放在它的前面。

它的工作很好像bringToBack()

 public void moveToBack(ViewGroup viewGroup, View v) { int s = 1; for (int i = 1; i < viewGroup.getChildCount(); i++) { if (viewGroup.getChildAt(1) == v) { s = 2; } else { viewGroup.getChildAt(s).bringToFront(); } } }