Android 为什么bringToFront只工作一次

Android 为什么bringToFront只工作一次,android,android-layout,android-view,Android,Android Layout,Android View,bringToFront只工作过一次,之后就不再工作了。为什么? 当您单击一次时,它会将该视图带到前面,但当您尝试返回该视图时,它将不再工作。触摸/点击操作始终正常 View view1,view2,view3,view4; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.a

bringToFront只工作过一次,之后就不再工作了。为什么? 当您单击一次时,它会将该视图带到前面,但当您尝试返回该视图时,它将不再工作。触摸/点击操作始终正常

    View view1,view2,view3,view4; 
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    //sets the Bundle  

    //code to initiate and putting the views in layout 
    view1= findViewById(R.id.button1);
    view2= findViewById(R.id.button2);

    view1.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            Log.i("onClick","1");
            view1.bringToFront();
            view1.invalidate(); 
            view2.invalidate(); 
        }
    });     
    view2.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            Log.i("onClick","2");
            view2.bringToFront(); 
            view1.invalidate(); 
            view2.invalidate(); 
        }
    });
}       
这是xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >


    <TextView
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"
        android:layout_marginLeft="30dp"
        android:text="Button2ButtonButton"
        android:textColor="#00ff00"
        android:textSize="60dp" />

    <TextView
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"
        android:layout_marginLeft="170dp"
        android:text="Button1ButtonButton"
        android:textColor="#ff0000"
        android:textSize="60dp" />

</RelativeLayout>


我想我解决了。我必须将所有内容都放在一个层中,并使其无效。

为了完成这项工作,您必须将视图放在其他视图之上

公共类MainActivity扩展了活动{

RelativeLayout rl1,rl2;
Button b1,b2;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    //rl1=(RelativeLayout)findViewById(R.id.rl1);
    //rl2=(RelativeLayout)findViewById(R.id.rl2);

    b1=(Button)findViewById(R.id.b1);
    b2=(Button)findViewById(R.id.b2);

    b1.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            b2.bringToFront();
            b1.invalidate();
            b2.invalidate();
            Toast.makeText(getApplicationContext(),"b1",1).show();
        }
    });
    b2.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            b1.bringToFront();
            b1.invalidate();
            b2.invalidate();
            Toast.makeText(getApplicationContext(),"b2",1).show();
        }
    });

}
xml是

<RelativeLayout
    android:id="@+id/rl1" 
    android:layout_width="match_parent"
    android:layout_height="match_parent"

    >
    <Button 
        android:id="@+id/b1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button1"
        android:layout_alignParentLeft="true"
        />

    <Button
        android:id="@+id/b2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:text="Button2" />

</RelativeLayout>


其中两个按钮都是一个接一个的,当你点击一次,它会给出相关的祝酒词,第二次点击会给出第二个祝酒词,依此类推……

我发现invalidate就足够了,可以放在前面(API 17有时不带,API 15每次都可以)

我已经能够对它进行排序了

if (android.os.Build.VERSION.SDK_INT >= 21) //Lollipop
{
    view.setZ(2);

    for (int i = 0; i < view.getParent().getChildCount(); i++)
    {
        if(view != view.getParent().getChildAt(i))
        {
            view.getParent().getChildAt(i).SetZ(1);
        }
    }
}

view.bringToFront();
for (int i = 0; i < view.getParent().getChildCount(); i++)
{
    view.getParent().getChildAt(i).invalidate();
}
view.getParent().requestLayout();
view.getParent().invalidate();
if(android.os.Build.VERSION.SDK\u INT>=21)//棒棒糖
{
视图。setZ(2);
对于(int i=0;i
您想做什么?单击一个按钮时隐藏另一个按钮?这只是一个测试,不起作用。我想我解决了。我必须将所有内容都放在一个层中,并使其无效。请在您的答案中添加更多详细信息,以便将来成员可以阅读并获得准确的修复。您的意思是将这两个按钮放在另一个嵌套相对层中美国犹他州?