마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

editbox 질문입니다 ㅠㅠ

0 추천

안녕하세요.

요즘 edittext 때문에 고민이 많은 개발자입니다 ㅠㅠ

 

a 버튼이 있습니다 

B라는 edittext 가 있습니다. b에가다 내용을 작성합니다  그후에 a를 눌렀을경우 a의 예시의 텍스트로 SS라고 하겠습니다.

a를 누르면 B의 내용에 SS가 추가 됩니다. 빨간색으로 말이죠 그후 다시 내용을 이어갑니다. 

 

제가 여기서 궁금한것은 edittext 의 문장을 전체로 가져와서 keycode_del 를 눌렀을경우 포커스가 SS라는 빨간색글자의 앞에서 눌렸는지 그냥 검은색 내용의 텍스트에서 눌렸는지 판단을 할수 있을까요??...

 

있다면 어떻게 해야될까요? ㅠㅠ

final Spanned user = Html.fromHtml("<font color=\"red\">"+SS+ "</font>");

int start = comment_text.getSelectionStart();
 
comment_text.append(user);
int end = comment_text.getSelectionEnd();
 
Spannable span = comment_text.getText();
span.setSpan(new SpannedString(user), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
 
현재는 SS를 가져와서 del 을 누르면 한글자씩만 지워지네요 ..ㅠㅠ 
고수님들 조언좀 부탁드리겠습니다. ㅠㅠ
스릉스릉 (1,260 포인트) 님이 2013년 7월 24일 질문
으읔;; 댓글 삭제는 어떻게 하죠;;

3개의 답변

0 추천
현제 커서의 위치를 가져 오셔서 추가된 텍스트의 길이와 비교하시면 되죠....

getSelectionEnd()

에디티텍스트에 다음과 같은 함수가 있습니다.

현재 커서의 마지막 위치를 반환 해줍니다.

현재 커서의 위치를 안다면 나머지는 일사천리겠죠....

그리고 위 함수외에 getSelectionStart()라는 함수도 있는데 평소에는 위의

함수와 같은 값을 리턴 하지만 블락선택일 경우 다르게 호출 됩니다.

함수의 이름만으로 뭘 의미 하시는지 아실 겁니다.

좀더 완벽하게 하시려면 블락 선택을 했을때의 예외처리를 해주셔야 할 겁니다.
ThisPlus (46,920 포인트) 님이 2013년 7월 24일 답변
답변 감사합니다. 한번 찾아보고 참고해서 개발해보겠습니다.
0 추천

http://stackoverflow.com/questions/17251226/remmove-whole-spannable-with-backspace

 

제가 제시해드린 방향으로 개발하시나보네요 ㅎㅎ

 

spannable 인터페이스란것도 존재했군요 재밌네요...

 

좀더 찾아봤습니다. 

 

spannable.removeSpan(span);

이란게 존재하는거 보면...

 

가능할거 같은데요 소스분석 해보시면...불가능한건 아닐거라 생각합니다

AND chobo (4,690 포인트) 님이 2013년 7월 24일 답변
답글감사합니다.

어렵습니다 ㅠㅠ
0 추천
저도 공부하는 입장이라 허접하지만 단순 판단하는 문제라면..
Spanned color=Html.fromHtml("<font color=\"@" + android.R.color.holo_red_dark + "\">"+str+"</font>");
이렇게 컬러를 안드로이드용(?)으로 설정해줍니다. 일반 컬러는 안되더군요. 될지도 모르겠지만 거기까진 안찾아봤습니다.

Spanned sp=null;
int end=tv.getSelectionEnd();
sp=tv.getText();

대충 span 만들고 포커스있는 곳을 end에 저장합니다.

TextAppearanceSpan[] textAppearance;
textAppearance=sp.getSpans(end-1, end, TextAppearanceSpan.class);
int arrayLength=textAppearance.length;

getSpans( 검색시작점, 검색끝점, 검색한 곳에서 가져올 정보)
이 메서드를 사용하는데 TextAppearancesSpan 이 가져올 수 있는 정보면 전부 가져와서 배열에 저장합니다.
앞서 포커스 위치를 저장했기에 검색을 포커스의 바로 앞자리에서 포커스 자리까지 검색합니다. 그럼 포커스 준곳의 바로 앞 문자를 검색합니다.
그것이 TextAppearanceSpan에 들어갈 수 있는 것이면.. 즉, 위에서 색깔을 안드로이드용(..?;;)으로 설정해놨으면 배열에 들어가게 될 것이고 배열 길이가 1이 됩니다.
arrayLength 가 1 이된다는거죠. 만약 설정안내놓은 글자면 0 이 됩니다.

다시 말하면 포커스 준곳의 글자가 빨간색이면 arrayLength 가 1이 되고 검은색이면 0 이 됩니다.
zoeas (920 포인트) 님이 2013년 7월 24일 답변
답글감사합니다.

색은 안드로이드용으로만 해야 들어가는건가요?. ㅠ
흐 어렵네요ㅕ ㅠㅠ
...