2011-07-27 14 views
8

Por lo tanto, actualmente estoy poniendo un huevo de Pascua dentro de mi aplicación y quiero que el Button sea invisible, pero al hacer clic (Rick Roll). Hasta el momento puedo hacer que funcione cuando digo:configurando el botón de Android invisible pero teniendo un onClick Listener conectado

Button.setVisibility(view.VISIBLE); 
Button.setBackgroundColor(Color.TRANSPARENT); 

y luego mi onClickListener. El único problema con esto es que tengo que tener texto en el Button para que se pueda hacer clic en él. Cuando saco el texto y lo hago completamente invisible, ¿nunca se llama al onClickListener por alguna razón?

Aquí es mi OnClickListener

wonderWhatThisDoes.setOnClickListener(new Button.OnClickListener() 
{ 
    @Override 
    public void onClick(View v) { 
     mMediaPlayer = MediaPlayer.create(About.this, R.raw.surprise); 
     mMediaPlayer.start(); 
     Context context = getApplicationContext(); 
     CharSequence text = "Congrats on finding our easter egg! Enjoy... :]"; 
     Toast toast = Toast.makeText(context, text, Toast.LENGTH_LONG); 
     toast.show(); 
    } 
}); 
+0

Publique el código ¿cómo implementa el 'OnClickListener()'? –

+0

implementación onClickListener no importa si nunca se llama. – cj1098

+2

Si el ancho y la altura de su Botón están configurados en wrap_content, entonces quizás el botón se está haciendo demasiado pequeño para tocarlo cuando no hay contenido. Tener el texto lo hará más grande a medida que crezca el ancho y la altura. –

Respuesta

14

En su diseño, haga que su botón tenga un ancho específico, como android:layout_width="40dp".

Si su ancho está establecido en wrap_content con un fondo transparente y sin texto, Android medirá esa vista teniendo un ancho de 0dp. Nunca podrás hacer clic en eso.

+0

Lo mismo aplica para la altura. Estoy usando RelativeLayout. lo que funcionó para mí fue simplemente establecer el ancho y alto a valores extravagantemente grandes, para asegurarse de que el área no es demasiado pequeña, pero usando 'layout_align *' funciones en conjunto. – theblang

5

intentar hacer el texto en el botón "" ...

myButton.setText(" "); 
+0

no funciona. Ya he intentado especificar el texto en xml en "" y onClickListener aún no se llama: '( – cj1098

+0

bien, establecer el texto en "" es equivalente a establecerlo en (nulo). Intente configurarlo en "" –

1

No utilice un botón y anular su dispatchTouchEvent de Actividad y manejarlo de esa manera .

+1

O use un fondo transparente para el botón con un tamaño fijo –

3

Asegúrese de que el ancho y la altura de su botón no estén configurados en wrap_content porque eso haría que el botón sea extremadamente pequeño si el texto es "". Si eso no funciona, también podría intentar reemplazar onClick() con onTouch():

button1.setOnTouchListener(new OnTouchListener() 
{ 
    @Override 
    public boolean onTouch(View v, MotionEvent event) 
    { 
     // TODO Auto-generated method stub 
     return false; 
    } 
}); 
4

usted puede crear cualquier punto de vista, tales como LinearLayout, se puede hacer clic. Realice un LinearLayout con las mismas dimensiones que el botón y configúrelo en OnClick listener a lo que maneje el evento. Dado que inherentemente no es visible, debe tener el mismo efecto.

1

Puede agregar OnClickListener a cualquier View, intente crear un ImageView con una imagen transparente y adjunte su oyente a eso.

+0

Ni siquiera necesitará una imagen transparente si usa una vista genérica – DeeV

1
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    Button b = (Button) findViewById(R.id.button1); 
    final CheckBox cb = (CheckBox) findViewById(R.id.checkBox1); 
    b.setBackgroundColor(Color.TRANSPARENT); 

    b.setOnClickListener(new OnClickListener() { 

     public void onClick(View arg0) { 
      // TODO Auto-generated method stub 
      cb.setChecked(true); 

a este botón código es invisible pero funcionó;))

+0

Respuesta inteligente. +1 para usted. – Luis

0

También puede desactivar el botón (No se podrá hacer clic).

en código Java:

btn.setClickable(false); 

En el diseño .xml:

android:clickable="false" 
3

respuesta simple es el alfa establecido a 0 como este.

<Button 
       android:layout_width="0dp" 
       android:layout_height="wrap_content" 
       android:layout_weight="1" 
       android:alpha="0" 
       android:clickable="true" 
       android:onClick="getAllImages" 
       android:visibility="visible" /> 

Será invisible y onclick funcionará.

+0

más fácil y solución elegante –

-1

Esto funciona correctamente para mí:

  • btn.setClickable(false) en GONE visibilidad.
  • btn.setClickable(true) en VISIBLE visibilidad.