2013-03-12 5 views
27

텍스트 선택을 위해 기존 기본 컨텍스트 액션 바 (CAB)를 오버라이드하고 싶습니다. 내 말은, 내 자신의 단추를 사용하여 내 CAB를 표시하고 싶을 때, 어떤 텍스트가 webview에서 선택되었을 때입니다. Android 설명서를 사용하여 CAB을 구현하려고했습니다. OnLongClickListener는 웹보기에서 텍스트 선택 이벤트를 캡처하지 않습니다. 텍스트 선택을 캡처하는 이벤트는 무엇입니까? 기본 CAB를 숨기고 텍스트 선택에 CAB를 표시 할 수 있습니까?안드로이드에서 텍스트 선택 (WebView)을위한 기본 컨텍스트 액션 바를 재정의

childWebView.setOnLongClickListener(new OnLongClickListener() { 
     @Override 
    // Called when the user long-clicks on someView 
     public boolean onLongClick(View view) { 
      if (mActionMode != null) { 
       return false; 
      } 

      // Start the CAB using the ActionMode.Callback defined above 
      mActionMode = startActionMode(mActionModeCallback); 
      view.setSelected(true); 
      return true; 
     } 
    }); 
+0

그 karka에 대한 해결책을 찾았습니까? –

+0

아니요. 나는하지 않았다. – arun8

+0

지금까지 어떤 해결책이 있습니까? – sanjeev

답변

8

이 문제를 해결할 수있었습니다. 나는 또한이 문제에 직면했고 웹상에서 어떤 해결책을 찾을 수 없었다.

그래서 LongClick 수신기를 설정하면 Webview에서 선택 표시를 중단합니다. 웹뷰 코드를 깊이 파고 들자 WebView의 startRunMode 메소드를 호출하고 SelectActionCallbackMode 클래스의 인스턴스를 전달하는 것으로 나타났습니다.

나는 단순히 웹보기 클래스를 확장하고이 같은 startRunMode 방법 오버라이드 :이 웹보기의 기본 하나를 표시하는 대신 내 콜백을 표시하려면 웹보기를 강제

public ActionMode startActionMode(ActionMode.Callback callback) 
{ 
    actionModeCallback = new CustomizedSelectActionModeCallback(); 
    return super.startActionMode(actionModeCallback); 
} 

합니다. 이렇게하면 이전과 같이 원활하게 선택이 이루어지고 CAB가 선택 될 때마다 CAB가 표시됩니다. CAB를 직접 해산하기위한 코드를 작성해야한다는 경고 만있었습니다.

4.1, 4.2 및 4.3 장치에서 테스트되었습니다.

희망이 도움이됩니다.

+0

고마워, 저를 위해 일합니다 – mohitum

+0

하지만 웹 뷰에서 선택한 텍스트를 가져올 수 없습니다. 또한, 내 구현에서는 때때로이 접근법을 사용하여 Kitkat webview에서 내부 오류가 발생합니다. – Frank

+0

@Frank JavaScript (window.getSelection(). toString())를 통해 선택한 텍스트를 가져올 수 있습니다. 나는 KitKat에서 아직 시도하지 않았고, 문제를 조사 할 것이다. –

1

공식 문서 Selection | Android Developers 노트가 :

행동과 요소가 CAB에 표시 선택 CAB 작업

당신이 결정할 수 있습니다. Action Bar pattern에서 가이드 라인을 사용하여 의 표면을 덮을 항목을 결정하고 오버플로로 이동할 항목을 결정하십시오.

동적으로 조정 CAB 작업 대부분의 경우 당신은 사용자가 선택에 더 많은 항목을 추가 동적 으로 CAB의 작업을 조정해야합니다. 하나의 선택된 데이터 항목에 적용되는 작업이 동일한 종류의 여러 개의 선택된 데이터 항목에 반드시 적용되는 것은 아닙니다.

불행히도, 견적에 포함 된 링크는 실제 세부 정보 없이만 일반 정보를 보유하는 섹션으로 연결됩니다. 상황을 악화 시키려면 Selection | Android Developers 페이지로 다시 연결됩니다.

조금 더 살펴보면, Lars Vogel의 this tutorial을 발견했습니다. 상황에 맞는 동작 모드는 특정 하위 작업의 기간에 대한 응용 프로그램 ActionBar 오버레이 임시 ActionBar를 활성화

: 나는 (형식 광산을) 인용.

일반적으로 상황 별 동작 모드는 항목을 선택하거나 길게 눌러 활성화됩니다.

구현하려면보기에서 startActionMode( 메서드를 호출하거나 활동에서 호출하십시오. 이 메서드는 인 ActionMode.Callback 개체를 가져 와서 ActionBar 컨텍스트의 수명주기를 담당합니다.

registerForContextMenu(view) 방법을 사용하여 View에 컨텍스트 메뉴를 지정할 수도 있습니다. 사용자가보기를 길게 누르면 상황에 맞는 메뉴가 활성화되어 입니다. 메서드 은 컨텍스트 메뉴 이 사용 된 후에 폐기 될 때마다 컨텍스트 메뉴가 활성화 될 때마다 호출됩니다. 컨텍스트 메뉴의 사용보다 상황 별 조치 모드를 선호해야합니다.

registerForContextMenu(view)을 사용하여 자체 메뉴를 만들 수 있다는 가장 유명한 참고 자료가 나와 있습니다. 답변을 복제하는 대신 this answerJ. Pablo Fernández으로 찾아서 여기에 CAB를 적용하는 방법에 대한 코드 예가 ​​포함되어 있습니다. 새로운 컨텍스트 메뉴를 등록하면 모든 기본 메뉴가 무시되지만 잘 모르겠습니다.지금이 문제를 테스트 할 수 없으므로이 문제가 해결되었는지 여부를 확인하게되어 기쁩니다.

관련 문제