studio - onclick android event
Android-ImageButton onClick trabajando en ICS y JB pero no en GB (1)
He creado un diseño un tanto simple con un total de 4 botones: 3 botones en la parte inferior del diseño están uno al lado del otro (en un RelativeLayout) y en un botón enorme casi en el medio de la pantalla.
En Ice Cream Sandwich y Jellybean, puedo hacer clic en cualquiera de los botones y todo funciona bien (es decir, se llaman las funciones respectivas OnClick) pero, extrañamente, en Gingerbread, cualquiera de los 3 botones de la parte inferior funciona pero no el del medio. onClick dispara muchas instrucciones, ninguna de las cuales se está ejecutando, por lo que yo sé, no se está llamando y no sé por qué.
El código para el diseño se da a continuación. ¡Cualquier ayuda es muy apreciada!
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/main_layout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/main_off"
android:orientation="vertical"
android:weightSum="10" >
<ImageButton
android:id="@+id/button_activate"
android:layout_width="155dp"
android:layout_height="0dp"
android:layout_gravity="center_horizontal"
android:layout_marginTop="170dp"
android:layout_weight="7.2"
android:background="@drawable/transparent"
android:clickable="true"
android:contentDescription="@string/app_name"
android:onClick="activate"
android:src="@drawable/transparent" />
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="30dp"
android:layout_marginTop="80dp"
android:layout_weight="2" >
<ImageButton
android:id="@+id/button_help"
android:layout_width="90dp"
android:layout_height="fill_parent"
android:layout_centerHorizontal="true"
android:layout_marginTop="0dp"
android:background="@drawable/transparent"
android:clickable="true"
android:contentDescription="@string/app_name"
android:onClick="openhelp"
android:src="@drawable/transparent" />
<ImageButton
android:id="@+id/button_settings"
android:layout_width="55dp"
android:layout_height="fill_parent"
android:layout_alignParentLeft="true"
android:layout_marginTop="0dp"
android:layout_toLeftOf="@+id/button_help"
android:background="@drawable/transparent"
android:clickable="true"
android:contentDescription="@string/app_name"
android:onClick="opensettings"
android:src="@drawable/transparent" />
<ImageButton
android:id="@+id/button_contact"
android:layout_width="70dp"
android:layout_height="fill_parent"
android:layout_alignParentRight="true"
android:layout_marginTop="0dp"
android:layout_toRightOf="@+id/button_help"
android:background="@drawable/transparent"
android:clickable="true"
android:contentDescription="@string/app_name"
android:onClick="opencontact"
android:src="@drawable/transparent" />
</RelativeLayout>
</LinearLayout>
Actividad que llama al diseño (main.xml):
//bunch of imports
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
LinearLayout layout = (LinearLayout) findViewById (R.id.main_layout);
boolean serviceOn = isMyServiceRunning();
if(serviceOn==true) layout.setBackgroundResource(R.drawable.main_on);
else if (serviceOn==false) layout.setBackgroundResource(R.drawable.main_off);
}
@Override
protected void onResume() {
super.onResume();
LinearLayout layout = (LinearLayout) findViewById (R.id.main_layout);
boolean serviceIsOn = isMyServiceRunning();
if(serviceIsOn==true) layout.setBackgroundResource(R.drawable.main_on);
else if (serviceIsOn==false) layout.setBackgroundResource(R.drawable.main_off);
}
public void activate(View v){
LinearLayout layout = (LinearLayout) findViewById (R.id.main_layout);
Resources res = getResources();
Drawable on = res.getDrawable(R.drawable.main_on);
Drawable off = res.getDrawable(R.drawable.main_off);
if (layout.getBackground().getConstantState() == off.getConstantState()){
layout.setBackgroundResource(R.drawable.main_on);
Toast.makeText(getApplicationContext(), "App has been activated", Toast.LENGTH_SHORT).show();
turnon();
}
else if (layout.getBackground().getConstantState() == on.getConstantState()){
layout.setBackgroundResource(R.drawable.main_off);
Toast.makeText(getApplicationContext(), "App has been deactivated", Toast.LENGTH_SHORT).show();
turnoff();
}
}
}
Puedo ejecutar esto bien en mi emulador para 2.2 y 2.3.
Lo único que puedo sugerir es que trate de eliminar elementos deslizables (tal vez algunos ajustes estén arruinando cosas), o trate de hacer que su altura de diseño relativa sea de 0dp, ya que está usando weight_sum