2014-10-08 2 views
-1

EditText에 남아있는 문자 수를 카운트하는 카운터 라벨 TextView를 만들었습니다. 나는 EditText 안에 196 개의 문자를 허용하고있다. EditText 문자 수가 0에 도달하면 카운터 레이블의 텍스트 색을 빨간색으로 변경하고 EditText를 비활성화하여 사용자가 더 많은 문자를 입력 할 수 없도록합니다.EditText 문자 카운트 다운 문제

사용자 입력을 허용하기 위해 마지막으로 입력 한 문자를 삭제하려고하면 문제가 발생합니다. 내가 뭘 하려는지 논리적 인 EditText가 더 이상 true가 아니라 EditText가 활성화되고 카운터 라벨의 텍스트 색상이 다시 흰색으로 바뀌고 카운트가 업데이트되도록 마지막 문자를 삭제하는 것입니다. 그러나 필자가 작성한 코드는 작동하지 않으며 EditText는 비활성화 된 상태로 유지됩니다. 비활성화하려면 addTextChangedListener를 사용하고 다시 사용하려면 onTouchListener를 사용하고 있습니다.

사용자의 터치를 캡처하고, UITextView를 활성화하고, DELETEBACKWARD 함수를 사용하여 마지막 문자를 삭제하고, 개수를 업데이트하는 TOUCHESBEGAN 메소드를 사용하여 iOS에서이 작업을 관리했습니다. 누군가 내 코드를 연구하고 안드로이드에 올바른 방향으로 나를 가리킬 수 있습니까?

public class MessageInputView extends ActionBarActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_message_input_view); 

    final ImageView continueButton = (ImageView) findViewById(R.id.continueButton); 
    final ImageView backButton = (ImageView) findViewById(R.id.backButton); 

    final EditText editText = (EditText) findViewById(R.id.editText); 
    final TextView counterLabel = (TextView) findViewById(R.id.counterLabel); 
    final int characterMax = 196; 

    final MediaPlayer mediaPlayer = (MediaPlayer.create(MessageInputView.this, R.raw.droplet_sound)); 

    editText.addTextChangedListener(new TextWatcher() { 
     @Override 
     public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3) { 

     } 

     @Override 
     public void onTextChanged(CharSequence charSequence, int i, int i2, int i3) { 

     } 

     @Override 
     public void afterTextChanged(Editable editable) { 

      counterLabel.setText(characterMax - editable.toString().length() + " characters remaining"); 


      if (editText.length() == characterMax){ 

       counterLabel.setTextColor(Color.parseColor("#FF0000")); 
       editText.setEnabled(false); 


      } 


     } 
    }); 

    editText.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View view, MotionEvent motionEvent) { 

      if (motionEvent.getAction() == MotionEvent.ACTION_DOWN){ 

       editText.setEnabled(true); 

       String userText = editText.getText().toString(); 

       editText.setText(userText.substring(0, userText.length() - 1)); 

       counterLabel.setTextColor(Color.parseColor("#FFFFFF")); 

       counterLabel.setText(characterMax - editText.length() + " characters remaining"); 

      } 

      return true; 
     } 
    }); 

답변

2

아마도 XML에서 편집문의 최대 길이를 정의 할 수 있습니다. maxLength 옵션을 사용하십시오.

 <EditText 
     android:id="@+id/EditText" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:maxLength="196" > 
    </EditText> 
0

와우. 처음에는 xml에 maxLength를 설정했지만, 작동하지 않는 addTextChangedListener 내의 IF 문에서 editText 대신 characterMax를 사용했습니다. 따라서 xml에서 maxLength 속성을 제거하고 다른 것들을 시도하기 시작했습니다. 마침내 필자는 IF 문 내에서 실수를 저질렀다는 것을 깨달았습니다. 논리가 작동하지만 계속해서 프로그래밍 적으로 EditText를 사용 불가능하게 만들려고했습니다. 사실 maxLength 속성을 설정하는 것만 큼 쉽습니다. Xcode에서 필요로했던 추가 단계를 생각해 보면 혼란 스러울뿐만 아니라 Android에서도 지루할 것이라고 생각했습니다. 소년은 내가 틀렸다! 여기에 user3347882 위에 추가 된 xml advice와 함께 내가 끝난 해결책이있다.

... 
@Override 
     public void afterTextChanged(Editable editable) { 

      counterLabel.setText(characterMax - editable.toString().length() + " characters remaining"); 


      if (editText.length() == characterMax){ 

       counterLabel.setTextColor(Color.parseColor("#FF0000")); 


      } 
      else{ 

       counterLabel.setTextColor(Color.parseColor("#FFFFFF")); 

      } 



     } 
    });