Aplicación de Android que funciona en el emulador pero no en el dispositivo real

Simplemente escribió esta sencilla aplicación para probar: un botón que muestra la fecha y la hora, y otro botón que selecciona un color aleatorio y lo muestra. Funciona bien en Emulator, pero los botones no hacen nada (no funcionan) cuando intento ejecutar la aplicación en un dispositivo real.

¿Puede alguien ayudarme a entender por qué?

MainActivity.java:

package yuvallevy.allyouneedapp; import android.graphics.Color; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; import android.widget.TextView; import java.util.Date; import java.util.Random; public class MainActivity extends AppCompatActivity { private Button btnShowTime; private Button btnRandomColor; private TextView timeText; private TextView randomColorView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btnRandomColor = (Button) findViewById(R.id.btnRandomColor); btnShowTime = (Button) findViewById(R.id.btnShowTime); timeText = (TextView) findViewById(R.id.timeText); randomColorView = (TextView) findViewById(R.id.randomColorView); btnShowTime.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String currentDataTimeString = java.text.DateFormat.getDateTimeInstance().format(new Date()); timeText.setText(currentDataTimeString); } }); btnRandomColor.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Random rnd = new Random(); int color = Color.argb(255, rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256)); randomColorView.setBackgroundColor(color); } }); } } 

activity_main.xml:

 <?xml version="1.0" encoding="utf-8"?> <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"> <Button android:id="@+id/btnShowTime" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_toLeftOf="@+id/randomColorView" android:layout_toStartOf="@+id/randomColorView" android:text="Show Time" android:textAppearance="?android:attr/textAppearanceLarge" /> <TextView android:id="@+id/timeText" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_above="@+id/btnRandomColor" android:layout_alignParentEnd="true" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:layout_toEndOf="@+id/btnRandomColor" android:layout_toRightOf="@+id/btnRandomColor" /> <Button android:id="@+id/btnRandomColor" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_below="@id/btnShowTime" android:text="Random Color" android:textAppearance="?android:attr/textAppearanceLarge" /> <TextView android:id="@+id/randomColorView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@+id/btnRandomColor" android:layout_alignParentEnd="true" android:layout_alignParentRight="true" android:layout_alignTop="@+id/btnRandomColor" android:layout_toRightOf="@+id/btnRandomColor" /> </RelativeLayout> 

AndoirdManifest.xml:

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="yuvallevy.allyouneedapp" > <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> 

Sospecho que este problema aparente está relacionado con el atributo android:supportsRtl="true" y los diferentes niveles de API de su dispositivo / emualtor.

Del documento oficial :

android: supportsRtl

Declara si su aplicación está dispuesta a soportar diseños de derecha a izquierda (RTL). Si se establece en true y targetSdkVersion se establece en 17 o superior, varias API de RTL serán activadas y utilizadas por el sistema para que su aplicación pueda mostrar diseños RTL. Si se establece en false o si targetSdkVersion se establece en 16 o inferior , las API de RTL se ignorarán o no tendrán efecto y su aplicación se comportará de la misma independientemente de la dirección de diseño asociada a la opción Locale del usuario. -a derecha).

El valor predeterminado de este atributo es false.

Este atributo se agregó en el nivel 17 de API.

Esto puede causar un comportamiento diferente entre el emualtor y su dispositivo.

Necesita arreglar su diseño según el indicador, o intente quitar este indicador .

No estoy convencido de que el apoyo de derecha a izquierda sea el problema, pero estoy de acuerdo en que los atributos de las colocaciones contradictorias podrían causar problemas imprevistos.

Si yo fuera tú, me desharía de todos los atributos confusos relativos a la colocación, y reemplazaría el RelativeLayout por un LinearLayout vertical más simple que contenga dos diseños horizontales (por favor, no los corte y pegue del código anterior, es mejor escribir esos LinearLayouts desde cero o usar el IDE para generarlos inicialmente)

si se activa Instant Run, esto hace que algunas clases se muevan. Para desactivar Instant Run Vaya a File -> Settings -> Build, Execution, Deployment -> Ejecutar instantáneamente -> desmarque "Habilitar ejecución instantánea"

  • genymotion permite su acceso permanentemente
  • ¿Cómo instalar Open NFC Simulator para Android?
  • El emulador de Android para siempre
  • ¿Cómo obtener el contenido del portapapeles en shell de adb?
  • Genymotion Android emulador - acceso adb?
  • Emulador de Android: No se puede iniciar la cámara web para capturar imágenes en el emulador
  • ¿Cómo puedo agregar un contacto mediante programación?
  • Cómo capturar el tráfico de Genymotion Emulator con WireShark?
  • Fallo al intentar instalar APK en el emulador
  • No sé cómo Copiar archivos a la tarjeta SD en Genymotion Android Emulator
  • Genymotion no obtuvo una dirección IP de la caja virtual
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.