Tengo una vista de lista y cuando el usuario presiona un botón quiero juntar las coordenadas del botón y colocar un texto de edición que inflamos justo encima de él en la pantalla. Cuando el usuario haga clic en cualquier otro lugar de la pantalla, el texto de edición desaparecerá y se activará un método que utiliza los datos que el usuario ingresó en el cuadro. ¿Cómo voy a hacer algo como esto? Me gustaría algo similar a QuickActions, pero no tan intrusivo. ¿Podría alguien apuntarme en la dirección de al menos cómo obtener las coordenadas del botón?Elemento de posición de Android en la pantalla
Respuesta
Ok, así que aquí es cómo he podido lograr lo que estoy buscando hacer. ¿Es posible colocar dinámicamente un PopupWindow sin tener que meterse con los márgenes de ajuste etc.
public void showPopup(View view, View parentView, final int getId, String getLbs){
int pWidth = 100;
int pHeight = 80;
int vHeight = parentView.getHeight(); //The listview rows height.
int[] location = new int[2];
view.getLocationOnScreen(location);
final View pView = inflater.inflate(R.layout.list_popup, null, false);
final PopupWindow pw = new PopupWindow(pView, pWidth, pHeight, false);
pw.setTouchable(true);
pw.setFocusable(true);
pw.setOutsideTouchable(true);
pw.setBackgroundDrawable(new BitmapDrawable());
pw.showAtLocation(view, Gravity.NO_GRAVITY, location[0]-(pWidth/4), location[1]+vHeight);
final EditText input = (EditText)pView.findViewById(R.id.Input);
input.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
Log.i("Focus", "Focus Changed");
if (hasFocus) {
//Shows the keyboard when the EditText is focused.
InputMethodManager inputMgr = (InputMethodManager)RecipeGrainActivity.this.getSystemService(Context.INPUT_METHOD_SERVICE);
inputMgr.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
inputMgr.showSoftInput(v, InputMethodManager.SHOW_IMPLICIT);
}
}
});
input.setText("");
input.requestFocus();
Log.i("Input Has Focus", "" + input.hasFocus());
pw.setOnDismissListener(new OnDismissListener(){
@Override
public void onDismiss() {
changeWeight(getId, Double.parseDouble(input.getText().toString()));
Log.i("View Dismiss", "View Dismissed");
}
});
pw.setTouchInterceptor(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_OUTSIDE) {
Log.i("Background", "Back Touched");
pw.dismiss();
return true;
}
return false;
}
});
}
El pWidth y pHeight son el tamaño de la PopupWindow he elegido y la vHeight es la altura de la vista principal de los padres que he recogido desde el contexto onCreate. Tenga en cuenta que este no es un código pulido. Todavía necesito agregar algunas cosas como entrada y salida animada, así como una pequeña flecha o algo para mostrar a qué ventana se está asociado. El setBackgroundDrawable es muy importante y, si no lo usa, no podrá hacer clic fuera del cuadro para cerrarlo.
En este momento, es raro. Tengo que hacer clic dos veces fuera del cuadro para cerrar la ventana. El primer clic parece resaltar mi cuadro de texto y el segundo clic realmente lo cierra. ¿Alguien tiene alguna idea de por qué podría estar pasando?
Desordenado, dependiendo de la jerarquía de su vista. El método getLeft() (junto con getRight, getTop y getBottom) son todos relativos al control View padre. Eche un vistazo al getLocationOnScreen y vea si hace lo que quiere.
- 1. CSS para mantener el elemento en la posición "fija" en la pantalla de
- 2. Mostrar AlertDialog en cualquier posición de la pantalla
- 3. Obtiene elemento en la posición especificada - JavaScript
- 4. Buscar posición de pantalla de un QGraphicsItem
- 5. Posición de DialogFragment en Android
- 6. ¿Problemas de posicionamiento en Firefox? posición: relativa para una pantalla: elemento de la tabla
- 7. ¿Cómo obtener la posición de la pantalla de un elemento Swing?
- 8. Posición en la parte inferior derecha de la pantalla
- 9. Posición winform en la esquina inferior izquierda de la pantalla
- 10. Cambio de la posición del diálogo en la pantalla androide
- 11. ¿Cómo obtener la posición de un elemento en UIWebView?
- 12. MVC Razor - Salida de texto en posición en la pantalla
- 13. ¿Cómo cambiar la posición de Toast en Android?
- 14. Cambiando la posición de Android Action Bar
- 15. Android Canvas.drawCircle en el centro de la pantalla
- 16. posición del elemento en la matriz
- 17. Obteniendo la posición de la anotación relativa a la pantalla
- 18. Mover la pantalla a una posición determinada
- 19. Pantalla TextView Parte inferior de la pantalla en Android
- 20. ¿Cómo obtengo la posición actual del cursor de la pantalla?
- 21. Jquery soluciona la posición div cuando div alcanza la posición de pantalla, no la posición de desplazamiento
- 22. Cocoa: Obteniendo la posición actual del mouse en la pantalla
- 23. ¿Cómo mostrar en pantalla la posición del cursor en una tableta o teléfono inteligente Android?
- 24. Disposición de Android: elemento de posición debajo de la vista más baja
- 25. ¿Cómo obtener la posición de un elemento en un StackPanel?
- 26. Recordar la posición de desplazamiento en el elemento QML
- 27. Determinar la posición de un elemento en un IQueryable
- 28. ¿Encontrar la posición de un elemento en una matriz bidimensional?
- 29. Encontrar la posición de un elemento en una matriz sencilla
- 30. R - posición de retorno del elemento en la matriz?
getLocationOnScreen parece proporcionarme las coordenadas xey. De hecho, estoy atascado sobre cómo inflar la vista y colocarla en la pantalla. ¿Algunas ideas? – ryandlf
Eso depende del ViewGroup subyacente: si está utilizando algo como LinearLayout o RelativeLayout, realmente no hay una buena manera de hacer un posicionamiento absoluto. Lo que podría intentar es inflarlo en la posición superior izquierda, establecer el tamaño en los valores deseados y luego establecer los márgenes según las coordenadas xey para colocarlo en su lugar. Muy desordenado, pero ... – Femi
Entonces, ¿no hay un método setAtThisLocation (x, y) que pueda usar en un objeto view? Voy a jugar con tu idea y publicar mis resultados. Gracias. – ryandlf