2011-07-27 38 views
8

因此,目前我将一个复活节彩蛋放在我的应用程序中,我希望Button不可见,但点击后(Rick roll)。到目前为止,我可以让它工作,当我说:设置android按钮不可见,但仍然有一个onClick监听器

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(); 
    } 
}); 
+0

发表代码你如何实现'OnClickListener()'? –

+0

onClickListener实现无关紧要,如果它永远不会被调用。 – cj1098

+2

如果Button的宽度和高度设置为wrap_content,那么当没有内容时,按钮可能太小而无法触摸。随着宽度和高度的增加,文字会变得更大。 –

回答

14

在您的布局中,让您的按钮具有特定的宽度,如android:layout_width="40dp"

如果您的宽度设置为wrap_content且背景透明且没有文字,则Android会将该视图的宽度设置为0dp。你将永远无法点击。

+0

同样适用于高度我使用的是RelativeLayout。对我而言,只是将宽度和高度设置为非常大的值,以确保该区域不会太小,但可以同时使用'layout_align *'功能。 – theblang

5

尝试使按钮,在“”一文......

myButton.setText(" "); 
+0

不起作用。我已经尝试在xml中指定文本“”,并且onClickListener仍然不会被调用:'( – cj1098

+0

好吧,将文本设置为“”等于将其设置为(null),尝试将其设置为“” –

1

不要使用按钮和覆盖您的活动的dispatchTouchEvent和处理它的方式。

+1

或者为固定尺寸的按钮使用透明背景 –

3

确保您的按钮的宽度和高度未设置为wrap_content,因为如果文本为“”,则会导致按钮极小。如果不工作,你也可以尝试用onTouch()取代的onClick():

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

您可以创建任何视图,如LinearLayout中,如点击。使用与按钮相同的尺寸制作LinearLayout,并将其设置为onClick监听器以处理事件。由于它本身不可见,它应该保持相同的效果。

1

您可以将OnClickListener添加到任何View,因此请尝试使用透明图像创建ImageView并将侦听器附加到该侦听器。

+0

如果他使用任何通用视图,他甚至不需要透明图像 – 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); 

这个代码按钮是不可见的,但它的工作;))

+0

智能答案。+1。 – Luis

0

您还可以禁用按钮(这不会是点击)。

在Java代码:

btn.setClickable(false); 

在.XML布局:

android:clickable="false" 
3

简单的答案是设置阿尔法为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将工作。

+0

最简单优雅的方案 –

-1

这正常工作对我来说:

  • btn.setClickable(false)GONE知名度。
  • btn.setClickable(true) on VISIBLE知名度。
相关问题