2012-03-07 17 views
1

現在、私はRelativeLayoutでパックされたwebviewを使用してプロジェクトを作成していますが、左下にImageButtonを配置しました:ユーザーの入力に応じてWebビューの前にビューを非表示にする方法

<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> 

これはうまくいきます。私が考えていた次のステップは、ボタンの後ろにあるものを見ることができないときにボタンがユーザーを邪魔することがあるということです。そのため、数秒後にボタンを隠そうとしましたが、ユーザーがスクロール/タッチしています/または何でも(ちょっとしたユーザーの入力)私はそれを表示し、数秒後にボタンが再び消えるはずです。ウェブビューのズームインボタンやズームアウトボタンのように。最も良い方法は、これらのズームボタンと同じ機能を使用することですが、私はこれを行う方法を見つけることができませんでした。私は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の上で試してみました同じことを。たいていの場合、それはたった1回しか動作せず、その後は全く反応がありません。

あなたは何か良いアイデアがあれば教えてください。 本当にありがとうございます!

+0

ユーザの入力ハンドラを使用してみてください? –

答えて

0

アンドロイド制限だと思います。

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に設定すると、全く動作しませんが、リスナーをwebviewに設定すると、最初のボタンが非表示になり、表示され、非表示になります。しかしその後、何も起こらない。 – Spipau

関連する問題