2016-06-01 13 views
0

Ich habe eine benutzerdefinierte Ansicht erstellt und über 14 EditText darauf gestellt. Ich wollte die Position eines von EditText ändern, also habe ich zuerst editText.bringToFront(); verwendet dann habe ich die Position dieses Knopfes mit dem Index dieses EditTextgetChildAt(childIndex).setY(y); geändert. Ich war überrascht, als ich sah, dass alle EditTexts, dass ihr Index höher als dieser Knopf ist, sich bewegen. Ich weiß nicht, warum bringToFront Methode ändern Sie den Index der anderen EditTexts.bringToFront funktioniert nicht ordnungsgemäß in android

Vereinfachter Quellcode mit Button (nicht EditText). Dies funktioniert ohne bringToFront(). Aber ich will EditText benutzen:

public class CustomView extends ViewGroup{ 

private int height; 
private int childCount; 
int chosenIndex; 

public CustomView(Context context) { 
    super(context); 
} 

@Override 
protected void onLayout(boolean changed, int l, int t, int r, int b) { 
    childCount = getChildCount(); 
    height = 200; 

    for (int childIndex = 0; childIndex < childCount; childIndex++) { 
     Button child = (Button) getChildAt(childIndex); 
     child.layout(l, childIndex * height, r, (childIndex + 1) * height); 
     child.setText("" + childIndex); 
    } 
} 

public boolean onInterceptTouchEvent(MotionEvent ev) { 
    super.onInterceptTouchEvent(ev); 

    float y = ev.getY(); 

    switch (ev.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
      for (int i = 0; i < childCount; i++) { 
       if (getChildAt(i).getY() < y && getChildAt(i).getY() + getChildAt(i).getHeight() > y) { 
        chosenIndex = i; 
       } 
      } 
      break; 

     case MotionEvent.ACTION_MOVE: 
       // No bringToFront() 
       getChildAt(chosenIndex).setY(y); 
      break; 

     case MotionEvent.ACTION_UP: 
       getChildAt(chosenIndex).setY(y); 
      break; 
    } 

    return false; 
} 

} 

Source Code mit EditText (Das Problem hier ist, das funktioniert nicht mit bringToFront() oder ohne)

public class CustomView extends ViewGroup{ 

private int height; 
private int childCount; 
int chosenIndex; 

public CustomView(Context context) { 
    super(context); 
} 

@Override 
protected void onLayout(boolean changed, int l, int t, int r, int b) { 
    childCount = getChildCount(); 
    height = 200; 

    for (int childIndex = 0; childIndex < childCount; childIndex++) { 
     EditText child = (EditText) getChildAt(childIndex); 
     child.layout(l, childIndex * height, r, (childIndex + 1) * height); 
     int color = Color.rgb(childIndex * 40, 0, 0); 
     child.setBackgroundColor(color); 
     child.setText("" + childIndex); 
    } 
} 

public boolean onInterceptTouchEvent(MotionEvent ev) { 
    super.onInterceptTouchEvent(ev); 

    float y = ev.getY(); 

    switch (ev.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
      for (int i = 0; i < childCount; i++) { 
       if (getChildAt(i).getY() < y && getChildAt(i).getY() + getChildAt(i).getHeight() > y) { 
        chosenIndex = i; 
       } 
      } 
      break; 

     case MotionEvent.ACTION_MOVE: 
      getChildAt(chosenIndex).bringToFront(); // Here is the problem with BringToFront 
      getChildAt(chosenIndex).setY(y); 
      break; 

     case MotionEvent.ACTION_UP: 
      getChildAt(chosenIndex).setY(y); 
      break; 
    } 

    return false; 
} 

} 
+0

Testen Sie es auf Android-Version> = 'Lollipop'? –

+0

ja. auf Lutscher. aber es ist das gleiche auf Android-Version 4.3 –

Antwort

0

Das Problem ist wahrscheinlich auf die elevation Parameter (es ist vorhanden auf> = Lollipop Versionen).

Try this:

  1. Set ViewCompat.setElevation(btn, 0); auf alle Ihre Buttons
  2. Nicht nur Anruf btn.bringToFront() aber auchViewCompat.setElevation(btn, someLargerThanZeroValue), wenn Sie Ihre Button über andere verschieben möchten.
+0

Nichts nach dem Versuch diese Schritte geändert. Wenn ich 'btn.bringToFront()' aufrufe, ändert sich der Index aller childs (buttons) in den Index von 'btn'. So bewegen sich alle Kinder, wenn ich die Position von 'btn' ändere –

+0

bitte den Quellcode sehen. –

+0

Ich habe etwas in der Quelle geändert. Bitte sehen Sie das. –