为什么bringToFront只能工作一次

时间:2013-05-11 23:46:13

标签: android android-layout android-view

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>

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

你必须把意见放在其他人的头顶才能得到这个工作..

像..

公共类MainActivity扩展了Activity {

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>

其中两个按钮是一个在另一个上,当你点击一次然后它将给出相关的吐司,然后第二次点击给出第二个吐司等等......

答案 2 :(得分:0)

我发现无效就足以带到前面(API 17有时不带,API 15每次都可以)

答案 3 :(得分:0)

我已经能够对此进行排序

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();