studio example event developer action_outside android button imageview ontouchlistener

example - Android: ImageView getID(); número entero que regresa



touch en android studio (7)

No puede obtener esa cadena widgetA1 ... Siempre obtendrá un número entero. Pero ese entero es exclusivo de ese control.

para que pueda hacer esto y comprobar qué botón está presionado

int ID = iv.getId(); if(ID == R.id.widgetA1) // your R file will have all your id''s in the literal form. { }

He configurado una clase onTouch para determinar cuándo se presiona uno de mis 40 botones.

El problema que estoy enfrentando es determinar qué botón se presionó.

Si uso:

int ID = iv.getId ();

Cuando hago clic en el botón "widgetA1"

Recibo la siguiente ID:

2131099684

Me gustaría que devuelva la cadena ID "widgetA1"

desde: game.xml

<ImageView android:layout_margin="1dip" android:id="@+id/widgetA1" android:src="@drawable/image" android:layout_width="wrap_content" android:layout_height="wrap_content"></ImageView>

desde: game.java

public boolean onTouch(View v, MotionEvent event) { ImageView iv = (ImageView)v; int ID = iv.getId(); String strID = new Integer(ID).toString(); Log.d(TAG,strID); //.... etc }

+ - + - + - + - + - + -

Yo, por lo demás, funciona bien, sabe qué botón estás presionando. Soy bastante nuevo en este Android JAVA. Avísame si me pueden ayudar.


Creo que puedes usar esto, pruébalo

ImageView imgView = new ImageView(this); String imgName = "img"//in your case widgetA1 int id = getResources().getIdentifier(imgName, "drawable", getPackageName());


Xml

android:tag="buttonA"

Src

Button.getTag().toString();


Para la implementación, puede usar el atributo de sugerencia para almacenar el nombre del botón, que está accesible. Por ejemplo, en el código del botón (archivo .xml) use la siguiente línea:

android:hint="buttonName"

Luego, en la función onClicked (archivo .java), escriba lo siguiente para obtener la sugerencia:

String hint = ((Button)v).getHint().toString(); //v is the view passed onClick


Obtendremos el valor entero que corresponde a la id de vistas. Para saber en qué botón está haciendo clic, mejor usar etiquetas. puede establecer la etiqueta en el archivo xml de diseño y puede comparar con qué elemento ha hecho clic.

<Button android:id="@+id/btnTest" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Button" android:tag="btntestTag"/>

Este es el uso de muestra.


Por supuesto, puedes obtener widgetA1 , simplemente hazlo:

ImageView iv = (ImageView)v; int id = iv.getId(); String idStr = getResources().getResourceName(id);

Debería darle your.package.name:id/widgetA1 : your.package.name:id/widgetA1 / your.package.name:id/widgetA1 , luego haga lo que quiera con esa cadena.


Editar - TL; DR:

View v; // handle to your view String idString = v.getResources().getResourceEntryName(v.getId()); // widgetA1

Original:

Sé que ha pasado un tiempo desde que publicaste, pero estaba lidiando con un problema similar y creo que encontré una solución mirando el código fuente de Android para la clase View .

Me di cuenta de que cuando imprime una vista (llamando implícitamente a String ()), los datos impresos incluyen la cadena de identificación utilizada en los archivos de diseño (la que desea) en lugar del número entero devuelto por getId (). Así que miré el código fuente de View to toString () para ver cómo Android obtenía esa información, y en realidad no es demasiado complicado. Prueba esto:

View v; // handle to your view // -- get your View -- int id = v.getId(); // get integer id of view String idString = "no id"; if(id != View.NO_ID) { // make sure id is valid Resources res = v.getResources(); // get resources if(res != null) idString = res.getResourceEntryName(id); // get id string entry } // do whatever you want with the string. it will // still be "no id" if something went wrong Log.d("ID", idString);

En el código fuente , Android también usa getResourcePackageName(id) y getResourceTypeName(id) para compilar la cadena completa:

String idString = res.getResourcePackageName(id) + ":" + res.getResourceTypeName(id) + "/" + res.getResourceEntryName(id);

Esto da como resultado algo en el sentido de android:id/widgetA1 .

¡Espero que ayude!