2011-07-27 15 views
8

Obecnie umieszczam pisankę wewnątrz mojej aplikacji i chcę, aby Button był niewidoczny, ale po kliknięciu (Rick roll). Do tej pory mogę sprawić, że zadziała, kiedy powiem:ustawienie niewidocznego przycisku Androida, ale nadal ma onClick Listener podłączony

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

, a następnie mój onClickListener. Jedynym problemem jest to, że muszę mieć tekst na Button, aby można było go kliknąć. Kiedy wyjmę tekst i sprawię, że będzie on całkowicie niewidoczny, onClickListener nigdy nie jest wywoływany z jakiegoś powodu?

Oto moja 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

Napisz kod, w jaki sposób zaimplementować 'OnClickListener()'? –

+0

Implementacja onClickListener nie ma znaczenia, jeśli nigdy nie zostanie wywołana. – cj1098

+2

Jeśli szerokość i wysokość przycisku jest ustawiona na wrap_content, to być może przycisk staje się zbyt mały, aby dotknąć, gdy nie ma zawartości. Posiadanie tekstu zwiększy jego rozmiar wraz ze wzrostem szerokości i wysokości. –

Odpowiedz

14

W swoim układzie przycisk powinien mieć określoną szerokość, na przykład android:layout_width="40dp".

Jeśli szerokość jest ustawiona na wrap_content z przezroczystym tłem i bez tekstu, system Android będzie mierzył ten widok jako o szerokości 0dp. Nigdy nie będziesz w stanie tego kliknąć.

+0

To samo dotyczy wysokości. Używam RelativeLayout. to zadziałało dla mnie po prostu ustawić szerokość i wysokość na dziwacznie duże wartości, aby upewnić się, że obszar nie jest zbyt mały, ale przy użyciu funkcji 'layout_align *' w połączeniu – theblang

5

spróbuj tekst przycisku „” ...

myButton.setText(" "); 
+0

nie działa. Próbowałem już określić tekst w xml na "", a onClickListener nadal nie jest wywoływany: '( – cj1098

+0

cóż, ustawienie tekstu na "" jest równoważne ustawieniu go na (null). Spróbuj ustawić na "" tylko dla kopnięć –

1

Nie używaj przycisku i zastąpić swoją dispatchTouchEvent czy działalność jest i obsługiwać go w ten sposób .

+1

Lub użyj przezroczystego tła dla przycisku o stałym rozmiarze –

3

Upewnij się, że szerokość i wysokość przycisku nie są ustawione na wrap_content, ponieważ może to spowodować, że przycisk będzie bardzo mały, jeśli tekst jest "". Jeśli to nie pomoże, można też spróbować wymienić onClick() z onTouch():

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

Można tworzyć żadnego widoku, takie jak LinearLayout, jak klikalne. Stwórz LinearLayout z tymi samymi wymiarami co przycisk i ustaw go na detektorzeKliknij na to, co obsługuje to wydarzenie. Ponieważ z natury nie jest widoczny, powinien mieć taki sam efekt.

1

Możesz dodać OnClickListener do dowolnego View, więc spróbuj utworzyć ImageView przezroczystym obrazkiem i dołącz do niego słuchacza.

+0

Nie będzie potrzebował nawet przezroczystego obrazu, jeśli użyje dowolnego ogólnego widoku – 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); 

tego przycisku kod jest niewidoczny, ale to działało;))

+0

Inteligentna odpowiedź. +1 dla ciebie. – Luis

0

Można również wyłączyć przycisk (Nie będzie klikalny).

W kodzie Java:

btn.setClickable(false); 

W układzie .xml:

android:clickable="false" 
3

Prosta odpowiedź jest ustawiony na 0 alfa jak ta.

Będzie niewidoczny i będzie działał.

+0

eleganckie rozwiązanie –

-1

To działa prawidłowo dla mnie:

  • btn.setClickable(false) na GONE widoczność.
  • btn.setClickable(true) na widoczności VISIBLE.
Powiązane problemy