setting android button invisible but still having

2020-05-27 08:41发布

问题:

So currently I'm putting an Easter egg inside my app and I want the Button to be invisible, but when clicked(Rick roll). So far I can make it work when I say:

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

and then my onClickListener. The only problem with this is that I have to have text on the Button for it to be clickable. When I take the text out and make it completely invisible then the onClickListener is never called for some reason?

Here is my 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();
    }
});

回答1:

In your layout, make your button have a specific width, like android:layout_width="40dp".

If your width is set to wrap_content with a transparent background and no text, Android will measure that view as having a width of 0dp. You'll never be able to click on that.



回答2:

try making the text in the button " "...

myButton.setText("    ");


回答3:

Simple answer is set alpha to 0 like this.

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

It will be invisible and onclick will work.



回答4:

You can create any view, such as LinearLayout, as clickable. Make a LinearLayout with the same dimensions as the button and set it's onClick listener to whatever handles the event. Since it inherently isn't visible, it should hold the same effect.



回答5:

Make sure that your button's width and height are not set to wrap_content because that would cause the button to be extremely small if the text is " ". If that doesn't work, you could also try replacing onClick() with onTouch():

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


回答6:

Don't use a button and override your Activity's dispatchTouchEvent and handle it that way.



回答7:

You can add an OnClickListener to any View, so try creating an ImageView with a transparent image and attach your listener to that.



回答8:

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);

to this code button is invisible but it worked ;))



回答9:

You can also disable the button (It will not be clickable).

In java code:

btn.setClickable(false);

In .xml layout:

android:clickable="false"


回答10:

This works properly for me:

  • btn.setClickable(false) on GONE visibility.
  • btn.setClickable(true) on VISIBLE visibility.