2012-08-02 3 views
0

나는 이것이 상당히 간단한 개념이라고 생각하지만 인터넷에서 대답을 찾을 수 없었습니다. EditText에서 사용자 정의 컨트롤을 만드는 방법은 무엇입니까?

은 내가 TextWatcher 사용하여 글고 내부의 입력 포맷하는 주요 활동 작성 :

public class MainActivity extends Activity implements TextWatcher { 
EditText text; 
int textCount; 
String numba1, numba, n; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.main); 
text = (EditText)findViewById(R.id.editText1); 
text.addTextChangedListener(this); 
} 


/* TextWatcher Implementation Methods */ 
public void beforeTextChanged(CharSequence s, int arg1, int arg2, int after) { 

// Does Nothing 


} 

public void onTextChanged(CharSequence s, int start, int before, int end) { 

//Does random stuff with text 
} 

public void afterTextChanged(Editable s) { 
//Does much more random stuff with text 

} 

protected void onResume() { 
    super.onResume(); 
    SharedPreferences prefs = getPreferences(0); 
    String restoredText = prefs.getString("text", null); 
    if (restoredText != null) { 
     text.setText(restoredText, TextView.BufferType.EDITABLE); 
     int selectionStart = prefs.getInt("selection-start", -1); 
     int selectionEnd = prefs.getInt("selection-end", -1); 
     if (selectionStart != -1 && selectionEnd != -1) { 
      text.setSelection(selectionStart, selectionEnd); 
     } 
    } 
} 
protected void onPause() { 
    super.onPause(); 
    SharedPreferences.Editor editor = getPreferences(0).edit(); 
    editor.putString("text", text.getText().toString()); 
    editor.putInt("selection-start", text.getSelectionStart()); 
    editor.putInt("selection-end", text.getSelectionEnd()); 
    editor.commit(); 
} 

다음, 나는 내 프로젝트에서이 여러 번 재사용, 그래서 사용자 정의의 EditText 컨트롤을 만들려 할을하는 원본과 모양이 비슷하지만 모든 서식을 지정하고 환경 설정을 저장합니다.

가 이상적으로 난 그냥 표시 사용자 정의 글고 치기 위해 XML을 사용 할 수있을 것입니다 :

<view 
    class="com.android.example.myEditText" 
    id="@+id/editText" /> 

을 내가 Android's Custom Components 튜토리얼을 읽었습니다,하지만 대신에 그들의 행동의 구성 요소의 전망을 변경하는 방법에 대한 주로 회담 그래서 저는 캔버스 사용에 주저합니다.

그래서 어떻게해야합니까?

답변

0

EditText 클래스를 확장하는 MyEditText이라는 Java 클래스를 만들 수 있습니다. 모든 생성자를 제공했는지 확인하십시오.

그런 다음이 클래스에 TextWatcher 인터페이스를 구현하고 필요한 구현을 제공하십시오. 당신이 com.example.MyEditText

가 중위가 TextWatcher를 사용하는

, 당신은 또한 대신 AutoCompleteEditText를 사용할 수 있습니다 전체 패키지 이름과 자격에 의해 즉 귀하의 질문에 언급 된

그런 다음 레이아웃이 사용자 정의 위젯 (사용자 정의 글고 치기)를 사용할 수있다 이 사용자 정의 컨트롤에 더 많은 유연성을 부여 할 EditText입니다.

+0

처럼 청취자에게

코드는 것 무언가를 추가 할 addTextChangedListner를 사용합니다. 그러나 'onCreate', 'onPause'및 'onResume'은 'EditText'에 대해 정의되지 않은 것에 대해 불평하는 것으로 보입니다. 나는 명백한 것을 놓치고 있는가? 또한 샘플 API에서는 인 텐트를 많이 사용하는 것처럼 보입니다. 내 코드가 도움이 될까요? –

+0

컨트롤에 대한 참조를 선언하거나 'findViewById'를 사용하여 참조를 검색 할 때'EditText' 대신'MyEditText' (또는 클래스 이름을 지정하십시오)를 사용하십시오. 희망은 당신이 언급 한 정의되지 않은'EditText'를 해결합니다. –

0

을 확장하는 MyEditText을 생성하여 모든 생성자를 구현하십시오.

그런 다음 클래스의 속성으로 TextWatcher의 인스턴스를 생성하고 대단히 감사합니다이

public class MyEditText extends EditText { 

    TextWatcher textWatcher = new TextWatcher() { 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void afterTextChanged(Editable s) { 
      // TODO Auto-generated method stub 

     } 
    }; 

    public MyEditText(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     addTextChangedListener(textWatcher); 
    } 



} 
관련 문제