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 EditText
getChildAt(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;
}
}
Testen Sie es auf Android-Version> = 'Lollipop'? –
ja. auf Lutscher. aber es ist das gleiche auf Android-Version 4.3 –