2012-03-07 46 views
1

我目前工作的一个项目中,我使用的WebView装在RelativeLayout的,我放在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> 

这工作得很好。下一步我想到的是,按钮有时会打扰我的用户,当他们看不到按钮后面的东西时...所以我试图隐藏按钮几秒钟后,当用户滚动/触摸/或任何(只是一些用户输入)我会显示它,并在几秒钟后,按钮应该再次消失。就像webview中的放大和缩小按钮一样。最好的办法是使用与这些缩放按钮相同的功能,但我找不到这样做的方法。我基于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(); 

      } 
     }); 

,我试图在网页视图相同。大部分时间只有一次,然后根本没有任何反应。

因此,如果您有任何想法或更好的解决方案,请让我知道。 我真的很感谢你的帮助!

+0

用户输入在哪里? – 2017-07-18 07:53:00

回答

0

我认为这是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; 
     } 
}); 
+0

感谢您的快速答复,但它没有奏效。当我将TouchListener设置为relativeLayout时,它根本不起作用,但是当我将Listener设置为webview时,它首次运行 - 按钮隐藏,显示和隐藏。但之后没有任何反应。 – Spipau 2012-03-07 12:15:55