【问题标题】:How to hide and display a view in front of a webview depending on user input如何根据用户输入在 web 视图前隐藏和显示视图
【发布时间】:2012-03-07 11:46:55
【问题描述】:

我目前正在做一个项目,我使用打包在 RelativeLayout 中的 webview,并在左下角放置了一个 ImageButton:

<RelativeLayout
        android:id="@+id/relativeLayout_maincontent"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >

        <WebView
        android:id="@+id/webview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_alignParentTop="true"
        />

        <ImageButton
            android:id="@+id/imageButton_call"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_marginLeft="2dp"
            android:src="@android:drawable/ic_menu_call" />

</RelativeLayout>

这很好用。我想的下一步是按钮有时会打扰我的用户,当他们看不到按钮后面的东西时......所以我试图在几秒钟后隐藏按钮并且当用户滚动/触摸时/或其他任何东西(只是一些用户输入)我会显示它,几秒钟后按钮应该再次消失。就像 web 视图中的放大和缩小按钮一样。最好的方法是使用与这些缩放按钮相同的功能,但我找不到这样做的方法。我根据How to show a view for 3 seconds, and then hide it?的知识创建了一个函数:

private void startCallButtonHidingThread() {
    Thread thread = new Thread() {
        @Override
        public void run() {
            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
            }

            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    callButton.setVisibility(ImageButton.GONE);
                }
            });
        }
    };
    thread.start();
}

效果很好。下一步是在用户输入发生时显示按钮,所以我尝试了这样的事情:

relativeLayout.setOnTouchListener(new OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if(callButton.getVisibility() == ImageButton.GONE) callButton.setVisibility(ImageButton.VISIBLE);
                startCallButtonHidingThread();
                            return false;
           }
 });

或者那个:

relativeLayout.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                if(callButton.getVisibility() == ImageButton.GONE) callButton.setVisibility(ImageButton.VISIBLE);
                startCallButtonHidingThread();

            }
        });

和我在 webview 上尝试过的一样。大多数时候它只工作一次,然后根本没有反应。

所以如果您有任何想法或更好的解决方案,请告诉我。 非常感谢您的帮助!

【问题讨论】:

  • 用户输入在哪里?

标签: java android webview


【解决方案1】:

我认为这是 android 限制。尝试使用处理程序:

private Handler handler = new Handler(){
    @Override
    public void handleMessage(Message msg) {
        switch (msg.what){
            case 1:{
                if(callButton.getVisibility() == ImageButton.GONE) callButton.setVisibility(ImageButton.VISIBLE);
                startCallButtonHidingThread();
            }
        }
};

还有你的听众:

relativeLayout.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            handler.sendEmptyMessage(1);
            return false;
        }
});

【讨论】:

  • 感谢您的快速回答,但没有奏效。当我将 TouchListener 设置为 relativeLayout 时,它根本不起作用,但是当我将 Listener 设置为 webview 时,它第一次起作用 - 按钮隐藏、显示和隐藏。但在那之后什么都没有发生。
猜你喜欢
  • 1970-01-01
  • 2015-01-15
  • 1970-01-01
  • 2014-03-08
  • 2023-03-28
  • 2013-07-22
  • 2020-04-08
  • 1970-01-01
  • 2018-02-04
相关资源
最近更新 更多