установка кнопки Android невидимой, но все еще с подключенным слушателем onClick - PullRequest
8 голосов
/ 28 июля 2011

Так что в настоящее время я помещаю пасхальное яйцо в свое приложение и хочу, чтобы Button был невидимым, но при нажатии (Рик ролл). Пока я могу заставить это работать, когда я говорю:

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

а потом мой onClickListener. Единственная проблема с этим состоит в том, что у меня должен быть текст на Button, чтобы он был кликабельным. Когда я вынимаю текст и делаю его полностью невидимым, тогда по какой-то причине onClickListener никогда не вызывается?

Вот мой 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();
    }
});

Ответы [ 10 ]

14 голосов
/ 28 июля 2011

Сделайте так, чтобы ваша кнопка имела определенную ширину, например android:layout_width="40dp".

Если для вашей ширины установлено значение wrap_content с прозрачным фоном и без текста, Android будет измерять этот вид как имеющий ширину 0dp. Вы никогда не сможете нажать на это.

5 голосов
/ 28 июля 2011

попробуйте сделать текст в кнопке "" ...

myButton.setText("    ");
4 голосов
/ 04 марта 2015

Простой ответ устанавливает альфа на 0 следующим образом.

 <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" />

Он будет невидим, и будет работать onclick.

4 голосов
/ 28 июля 2011

Вы можете создать любое представление, например LinearLayout, как интерактивное.Создайте LinearLayout с теми же размерами, что и у кнопки, и установите для слушателя onClick все, что обрабатывает событие.Поскольку он по своей сути не виден, он должен иметь тот же эффект.

3 голосов
/ 28 июля 2011

Убедитесь, что ширина и высота вашей кнопки не установлены на wrap_content, потому что это приведет к тому, что кнопка будет очень маленькой, если текст "". Если это не сработает, вы также можете попробовать заменить onClick () на onTouch ():

button1.setOnTouchListener(new OnTouchListener()
{
    @Override
    public boolean onTouch(View v, MotionEvent event)
    {
        // TODO Auto-generated method stub
        return false;
    }
});
1 голос
/ 17 июля 2012
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);

для этого кода кнопка невидима, но она работала;))

1 голос
/ 28 июля 2011

Вы можете добавить OnClickListener к любому View, поэтому попробуйте создать ImageView с прозрачным изображением и присоединить к нему слушателя.

1 голос
/ 28 июля 2011

Не используйте кнопку, переопределите dispatchTouchEvent вашей Деятельности и обработайте его таким образом.

0 голосов
/ 05 апреля 2017

Это работает правильно для меня:

  • btn.setClickable(false) при GONE видимости.
  • btn.setClickable(true) при VISIBLE видимости.
0 голосов
/ 10 декабря 2014

Вы также можете отключить кнопку (она не будет активна).

В коде Java:

btn.setClickable(false);

В формате XML:

android:clickable="false"
...