【问题标题】:Android display a button with OnTouchListenerAndroid 用 OnTouchListener 显示一个按钮
【发布时间】:2013-03-27 01:43:21
【问题描述】:

我有一个按钮,在我按下它 3 秒后就会消失。我想通过触摸屏幕使其再次可见。

public class MainActivity extends Activity {

    Runnable buttonRunnable;
    Handler buttonHandler = new Handler();

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final Button button=(Button)findViewById(R.id.myButton);
        buttonRunnable = new Runnable() {
            public void run() {
                button.setVisibility(View.GONE);

            }
        };

        button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {   

                buttonHandler.postDelayed(buttonRunnable, 3000);
            }
        });
    }



private OnTouchListener buttonOnTouchListener = new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {

            final Button button=(Button)findViewById(R.id.myButton);
            final LinearLayout linearLayout=(LinearLayout)findViewById(R.id.myLinearLayout);

            linearLayout.setClickable(true);
            linearLayout.setOnClickListener(new OnClickListener() { 
                public void onClick(View view) {   

                    button.setVisibility(View.VISIBLE);
                }
            });
            return true;
        }

    };

}

我可以在 3 秒后隐藏按钮,但我无法让它再次可见。

【问题讨论】:

    标签: android button android-widget visible ontouchlistener


    【解决方案1】:

    您需要获取对父容器视图的引用,并确保在其上调用 setClickable(true)。然后,将另一个单击处理程序附加到该视图,并在该单击处理程序中调用 button.setVisibility(View.VISIBLE);

    【讨论】:

    • 感谢您的回复,Sky Kelsey。我对 Android 很陌生,我不确定如何获取对父容器视图的引用并在其上调用 setClickable(true)。您能否提供一个示例,说明我在特定情况下如何做到这一点?
    • 在你的布局中,确保你为顶级父容器视图设置了一个id,这很可能是一个LinearLayout。然后,使用 findViewById() 获取对该视图的引用。
    • 我已经用您的解决方案更新了我的原始代码。我已将所有内容都放在 OnTouchListener 中,但仍然无法看到按钮。
    • 好吧,也许我误会了你。您是否希望在触摸屏幕上的任何位置后再次显示按钮,或者只是在按钮可见时所在的位置。如果是后者,那么您需要将按钮可见性更改为 View.INVISIBLE 而不是 View.GONE。 View.GONE 完全从布局中删除了视图,因此它没有机会接收触摸。 View.INVISIBLE 只是不绘制视图,但它仍然可以获得触摸事件。希望这会有所帮助。
    • 感谢您阐明 GONE 和 INVISIBLE 之间的区别,很高兴知道这一点。我只想在触摸屏幕上的任何位置后再次看到该按钮。我已将 View.GONE 更改为 View.INVISIBLE,但我仍然无法让它出现。我对 Android 的了解非常有限,但我认为问题出在我的 OnTouchListener 方法中。
    【解决方案2】:

    我已经解决了这个问题:

    public class MainActivity extends Activity{
    
        Runnable buttonRunnable;
        Handler buttonHandler = new Handler();
    
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            final LinearLayout linearLayout=(LinearLayout)findViewById(R.id.myLinearLayout);
            final Button button=(Button)findViewById(R.id.myButton);
            buttonRunnable = new Runnable() {
                public void run() {
                    button.setVisibility(View.INVISIBLE);
    
                }
            };
    
            button.setOnClickListener(new View.OnClickListener() {
                public void onClick(View view) {   
    
                    buttonHandler.postDelayed(buttonRunnable, 3000);
                }
            });
    
            linearLayout.setOnTouchListener(buttonOnTouchListener);
        }
    
        private OnTouchListener buttonOnTouchListener = new OnTouchListener() { 
            @Override
            public boolean onTouch(View v, MotionEvent event) {
    
                final Button button=(Button)findViewById(R.id.myButton);
                button.setVisibility(View.VISIBLE);
                return true;
            }
        };
    }
    

    【讨论】:

      猜你喜欢
      • 2013-08-23
      • 2013-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多