2012-03-07 81 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