2012-02-27 1 views
7

저는 EditText가 있으며 사용자가 일부 텍스트를 선택하고 선택한 텍스트 (굵게, 기울임 꼴 등)에 몇 가지 기본 서식을 적용 할 수있게하려고합니다. 그래도 표준 복사, 잘라 내기, 붙여 넣기 옵션이 필요합니다. 안드로이드 문서에서 어딘가에 이것을 읽으려면 EditText에서 setCustomSelectionActionModeCallback()을 호출하고 ActionModeCallback()을 전달해야합니다. 그래서 그렇게했습니다. 내 활동의에서 onCreate에서오버플로 버튼으로 인해 작업 모드가 강제로 완료됩니다.

() 메소드 :

myEditText.setCustomSelectionActionModeCallback(new TextSelectionActionMode()); 

콜백 선언 : 여기 내 코드의

private class TextSelectionActionMode implements ActionMode.Callback { 
    @Override 
    public boolean onActionItemClicked(ActionMode mode, MenuItem item) { 
     return false; 
    } 

    @Override 
    public boolean onCreateActionMode(ActionMode mode, Menu menu) { 
     menu.add("Bold"); 
     return true; 
    } 

    @Override 
    public void onDestroyActionMode(ActionMode mode) { 
    } 

    @Override 
    public boolean onPrepareActionMode(ActionMode mode, Menu menu) { 
     return false; 
    } 
} 

제가하는 데 문제는입니다 나는 (에 오버 플로우 버튼을 클릭하면 내 "굵게"메뉴 항목에 액세스) ActionMode가 즉시 닫힙니다. 그것은 잘 작동

MenuItem bold = menu.add("Bold"); 
bold.setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_ALWAYS); 

하고 (이것은 분명 아무것도 안하지만) 나는 그것을 클릭 할 수 있습니다 : 내가 설정 한 경우 항상이를 사용하여 액션으로 표시합니다. 내가 여기서 무엇을 놓치고 있니?

편집 : 프로그래밍 방식으로 메뉴 항목을 추가하는 대신 메뉴를 실제로 팽창 시키면 정확히 동일한 문제가 발생합니다. 다시 한번 말하지만, 내가 항상 행동으로 보여 주도록 강요하면 문제는 사라집니다.

답변

3

프레임 워크 문제입니다. textview가 'focus changed'이벤트를 수신하면 textview는 작업 모드를 중단합니다. 오버플로 팝업이 표시되면 textview에 포커스가 누락됩니다.

+0

그래, 어떻게 문제를 예방할 수 있습니까? – MBulava

1

이 문제는 Android 6.0에서 해결되었습니다. 그러나 안드로이드 6.0에서 here으로 설명한대로 ActionMode.Callback2을 사용해야합니다.

Android 5.x의 경우 다음 해결 방법을 사용하는 것이 좋습니다. Toolbar 또는 ActionBar에 버튼을 추가하고 현재 선택 항목을 기록한 다음 다른 상황에 맞는 메뉴를 엽니 다.

this.inputText_selectionStart = inputText.getSelectionStart(); 
this.inputText_selectionEnd = inputText.getSelectionEnd(); 
registerForContextMenu(inputText); 
openContextMenu(inputText); 
unregisterForContextMenu(inputText); 
관련 문제