3

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

4 回答 4

2

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

于 2013-05-14T03:07:23.797 回答
0

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

于 2014-06-07T20:18:01.530 回答
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>

其中两个按钮相互重叠,当您单击一次时,它将给出相关的 toast,第二次单击给出第二个 toast,依此类推......

于 2014-02-23T14:32:31.413 回答
0

I have been able to sort this

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();
于 2017-02-10T17:03:58.810 回答