Editext.setSelection 与搜索栏 Android
Editext.setSelection with Seekbar Android
嗨,我遇到了 EditText
和 SeekBar
的问题。
问题
拖动 Seekbar 时,它会将进度发送到 EdiText
,这是常见的行为,但是当我试图清除按下清除按钮时,EditText
只会清除 1 个数字,它怎么能清除所有像正常的数字 EditText
?多多指教谢谢:)
示例:
我的 EditText
显示 1000,如果我点击并按住擦除按钮,结果将是 100,然后什么也不会发生,但我想要的是 100,10,1 并清除,可以这样做吗?我该怎么做?
mSbTest = findViewById(R.id.sb_testing);
mEtTextSize = findViewById(R.id.et_text_size);
mSbTest.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(final SeekBar seekBar, int progress, boolean fromUser) {
mEtTextSize.setText(String.valueOf(seekBar.getProgress()));
mEtTextSize.setSelection(mEtTextSize.getText().length());
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
mEtTextSize.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
if (!s.toString().isEmpty()) {
setEditTextMaxLength(mEtTextSize, 9);
mCustomBarChart.TextSize(Integer.valueOf(s.toString()));
mCustomBarChart.invalidate();
mEtTextSize.removeTextChangedListener(this);
mSbTest.setProgress(selectedValue);
selectedValue = Integer.valueOf(s.toString());
mEtTextSize.addTextChangedListener(this);
}
}
});
请使用这个,它工作完美
sikbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
if(i>0){
editText.setText(String.valueOf(i));
editText.setSelection(String.valueOf(i).length());
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
在onTextChange中使用这个
@Override
public void afterTextChanged(Editable editable) {
if (!editable.toString().isEmpty()) {
int progress = Math.round(Float.parseFloat(editable.toString()));
sikbar.setProgress(progress);
}
else {
sikbar.setProgress(0);
}
//此侦听器仅用于单击时擦除所有文本。
在此处输入代码
editText.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
//You can identify which key pressed buy checking keyCode value with KeyEvent.KEYCODE_
if(keyCode == KeyEvent.KEYCODE_DEL) {
//this is for backspace
mCountDownTimer.start();
}
return false;
}
});
在 onTextChange 中请检查输入的大小,否则会抛出异常。
在几秒后为一个一个明文添加计时器,并首先在 keylistener 上启动计时器。
CountDownTimer mCountDownTimer(global variable);
mCountDownTimer = new CountDownTimer(1200, 1000) {
boolean mText=true;
public void onTick(long millisUntilFinished) {
String mainText = editText.getText().toString().trim();
if(mainText.length()>0&& !mText){
String text=mainText.substring(0, mainText.length() - 1);
editText.setText(text);
editText.setSelection(editText.getText().length());
mText=true;
}
}
public void onFinish() {
String mainText = editText.getText().toString().trim();
if(mainText.length()==0)
{
mCountDownTimer.cancel();
mText=true;
}
else{
mCountDownTimer.start();
mText=false;
}
}
};
我已经自己解决了这个问题,请参考下面的代码以供将来参考。还要感谢 Avinash 提供的提示和想法。干杯:)
mSbTest = findViewById(R.id.sb_testing);
mEtTextSize = findViewById(R.id.et_text_size);
mSbTest.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(final SeekBar seekBar, final int progress, boolean fromUser) {
if (fromUser) {
mEtTextSize.setText(String.valueOf(progress));
Selection.setSelection(mEtTextSize.getText(), mEtTextSize.length());
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
mEtTextSize.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
if (!s.toString().isEmpty()) {
setEditTextMaxLength(mEtTextSize, 9);
mEtTextSize.removeTextChangedListener(this);
mEtTextSize.requestFocus();
mSbTest.setProgress(Integer.valueOf(s.toString().trim()));
mEtTextSize.addTextChangedListener(this);
}
}
});
嗨,我遇到了 EditText
和 SeekBar
的问题。
问题
拖动 Seekbar 时,它会将进度发送到 EdiText
,这是常见的行为,但是当我试图清除按下清除按钮时,EditText
只会清除 1 个数字,它怎么能清除所有像正常的数字 EditText
?多多指教谢谢:)
示例:
我的 EditText
显示 1000,如果我点击并按住擦除按钮,结果将是 100,然后什么也不会发生,但我想要的是 100,10,1 并清除,可以这样做吗?我该怎么做?
mSbTest = findViewById(R.id.sb_testing);
mEtTextSize = findViewById(R.id.et_text_size);
mSbTest.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(final SeekBar seekBar, int progress, boolean fromUser) {
mEtTextSize.setText(String.valueOf(seekBar.getProgress()));
mEtTextSize.setSelection(mEtTextSize.getText().length());
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
mEtTextSize.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
if (!s.toString().isEmpty()) {
setEditTextMaxLength(mEtTextSize, 9);
mCustomBarChart.TextSize(Integer.valueOf(s.toString()));
mCustomBarChart.invalidate();
mEtTextSize.removeTextChangedListener(this);
mSbTest.setProgress(selectedValue);
selectedValue = Integer.valueOf(s.toString());
mEtTextSize.addTextChangedListener(this);
}
}
});
请使用这个,它工作完美
sikbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
if(i>0){
editText.setText(String.valueOf(i));
editText.setSelection(String.valueOf(i).length());
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
在onTextChange中使用这个
@Override
public void afterTextChanged(Editable editable) {
if (!editable.toString().isEmpty()) {
int progress = Math.round(Float.parseFloat(editable.toString()));
sikbar.setProgress(progress);
}
else {
sikbar.setProgress(0);
}
//此侦听器仅用于单击时擦除所有文本。 在此处输入代码
editText.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
//You can identify which key pressed buy checking keyCode value with KeyEvent.KEYCODE_
if(keyCode == KeyEvent.KEYCODE_DEL) {
//this is for backspace
mCountDownTimer.start();
}
return false;
}
});
在 onTextChange 中请检查输入的大小,否则会抛出异常。
在几秒后为一个一个明文添加计时器,并首先在 keylistener 上启动计时器。
CountDownTimer mCountDownTimer(global variable);
mCountDownTimer = new CountDownTimer(1200, 1000) {
boolean mText=true;
public void onTick(long millisUntilFinished) {
String mainText = editText.getText().toString().trim();
if(mainText.length()>0&& !mText){
String text=mainText.substring(0, mainText.length() - 1);
editText.setText(text);
editText.setSelection(editText.getText().length());
mText=true;
}
}
public void onFinish() {
String mainText = editText.getText().toString().trim();
if(mainText.length()==0)
{
mCountDownTimer.cancel();
mText=true;
}
else{
mCountDownTimer.start();
mText=false;
}
}
};
我已经自己解决了这个问题,请参考下面的代码以供将来参考。还要感谢 Avinash 提供的提示和想法。干杯:)
mSbTest = findViewById(R.id.sb_testing);
mEtTextSize = findViewById(R.id.et_text_size);
mSbTest.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(final SeekBar seekBar, final int progress, boolean fromUser) {
if (fromUser) {
mEtTextSize.setText(String.valueOf(progress));
Selection.setSelection(mEtTextSize.getText(), mEtTextSize.length());
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
mEtTextSize.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
if (!s.toString().isEmpty()) {
setEditTextMaxLength(mEtTextSize, 9);
mEtTextSize.removeTextChangedListener(this);
mEtTextSize.requestFocus();
mSbTest.setProgress(Integer.valueOf(s.toString().trim()));
mEtTextSize.addTextChangedListener(this);
}
}
});