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

EditText 일부만 수정을 할 수있을까요?

0 추천

안녕하세요, 

EditText로 특정 문구를 입력,편집해서 사용하려고 합니다.

ex)

안녕하세요. 좋은 하루 보내세요.

라는 문구를 입력하는데, 앞에 안녕하세요. 를 수정하지 못하게 하는 방법이 없을까요?

간단히 말해서, 전체 text 중에서 특정 단어들을 제외하고 수정하고 싶습니다.

이런식으로도 생각해봤는데, 어떻게 하면 더 좋을지...모르게씁니다 ㅠㅠ

 

anci (19,950 포인트) 님이 2014년 2월 11일 질문

2개의 답변

0 추천
API단에서 제공해주는 기능은 없는거로 알고있구요.

굳이 하시길 원하신다면

editText.addTextChangedListener()에 리스너를 추가해서 affterTextChanged가 호출 되었을때, 해당 문구를 보장하도록 해주셔야할 거같은데.

이 방법을 사용하시면 포커싱도 맞춰줘야하는 문제가 생깁니다.

API단에서 제공해주지 않는 기능을 이용하면 골치아픈 일이 생깁니다.

아무튼 이런 방법이 있습니다.
익명사용자 님이 2014년 2월 11일 답변
0 추천

진짜 어려운걸 하고계시는군요...

일단 여러가지 방법이있겠지만.. EditText를 커스텀해서 만들어야되는데요..

Spannable를 사용해서 하는방법이있습니다..

특정이벤트를통해사과라는 단어를 얻으면 그해당 단어에 index를 구한다음

TextView를 BitmapDrawable으로 변환하는방법이있습니다

변환하는 방법은 그렇게 어렵진않은데 인덱스값을 어떻게 구하냐는 로직이 좀 머리아프겠군요..

//해당 텍스트를 BitmapDrawable로 변환하는 로직

SpannableStringBuilder ssb = new SpannableStringBuilder("과일은 뭐뭐뭐 맛난건 뭐뭐뭐");

TextView textView = new TextView(context);
            textView.setTextAppearance(context, android.R.attr.textAppearanceSmall);
            textView.setTextSize((float)(textView.getTextSize()));
            textView.setText(과일);
            FontLoader.apply(textView);
            BitmapDrawable bitmapDrawable = (BitmapDrawable) extractBitmapFromTextView(textView);
bitmapDrawable .setBounds(0, 0, bmpDrawable.getIntrinsicWidth(), bmpDrawable.getIntrinsicHeight());
ssb.setSpan(new ImageSpan(bitmapDrawable), 과일의 index start, 과일의 index end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
setText(ssb);
 
 
 
public static Object extractBitmapFromTextView(View view) {
    try {
    int spec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
            view.measure(spec, spec);
            view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());
            Bitmap b = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888);
            Canvas c = new Canvas(b);
            c.translate(-view.getScrollX(), -view.getScrollY());
            view.draw(c);
            view.setDrawingCacheEnabled(true);
            Bitmap cacheBmp = view.getDrawingCache();
            Bitmap viewBmp = cacheBmp.copy(Bitmap.Config.ARGB_8888, true);
            view.destroyDrawingCache();
            return new BitmapDrawable(viewBmp);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
return null;
    }
 

 

whdrb19 (23,520 포인트) 님이 2014년 2월 11일 답변
...