2012-03-07 5 views
1

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

잘 작동합니다. 내가 생각하고있는 다음 단계는 단추 뒤에 물건이 보이지 않을 때 단추가 때때로 사용자를 방해 할 수 있다는 것입니다. 그래서 몇 초 후에 단추를 숨기려고 시도하고 사용자가 스크롤/터치 할 때/또는 무엇이든지 (단지 일부 사용자 입력) 나는 그것을 표시 할 것이고 몇 초 후에 버튼은 다시 사라질 것입니다. 웹보기의 확대/축소 버튼과 같습니다. 가장 좋은 방법은 이러한 줌 버튼과 동일한 기능을 사용하는 것이지만이를 수행 할 수있는 방법을 찾지 못했습니다. 나는 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

사용자 입력 처리기를 사용하려고? –

답변

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

관련 문제