0
當用戶選擇一個EditText
,我想光標位置從0開始。這個EditText
的目的是爲了更容易地在一個時間HH
格式輸入。設置光標位置爲0時EditText上獲得焦點
這裏是我的嘗試焦點變化監聽器:
txtStartHH.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus)
txtStartHH.setSelection(0);
}
});
下面是我的文字守望者的代碼,這可能會或可能不相關:
txtStartHH.addTextChangedListener(new TextWatcher()
{
boolean formatting;
int mStart;
int mEnd;
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
this.mStart = -1;
mStart = start + count;
mEnd = Math.min(mStart + count, s.length());
}
@Override
public void afterTextChanged(Editable s) {
if (!formatting)
{
formatting = true;
if (s.toString().length() == 3)
{
if (mStart >= 0)
{
if (s.toString().substring(mStart - 1, mStart).matches("[0-2]+") && mStart == 1)
{
if (Character.getNumericValue(s.charAt(0)) > 1
&& Character.getNumericValue(s.charAt(mEnd)) > 3)
{
s.replace(mEnd, mEnd + 1, "3");
s.replace(1, 2, "");
}
else
s.replace(mStart, mEnd, "");
}
else if (s.toString().substring(mStart, mEnd).matches("[0-9]+") && mStart == 2)
{
if (Character.getNumericValue(s.charAt(1)) > 3
&& Character.getNumericValue(s.charAt(0)) > 1)
{
s.replace(0, 1, "1");
s.replace(2, 3, "");
}
else
s.replace(mStart, mEnd, "");
}
else
{
// remove the character that has just been entered (i.e, cancels the insertion)
s.replace(mStart - 1, mStart, "");
}
}
if (mStart > 2)
{
s.replace(mStart - 1, mStart, "");
}
}
else
{
if (mStart == mEnd && s.toString().length() < 2)
{
if (mStart == 1)
{
// user has just backspaced the second char
s.insert(mStart, "0");
mStart--;
txtStartHH.setSelection(mStart);
}
if (mStart == 0)
{
// user has just backspaced the first char
s.insert(mStart, "0");
mStart--;
txtStartHH.setSelection(mStart);
}
}
}
formatting = false;
if (mStart > 1 && !jumpingTimes)
{
txtStartMM.requestFocus();
txtStartMM.setSelection(0);
}
}
}
});
然而,當EditText
正在獲得焦點,光標出現在EditText
被按下的位置,而不是在開始處。這裏有什麼問題 - 有沒有其他方法可以使用它?
不幸的是這只是突出顯示所有在該領域出於某種原因:( –
這是奇怪的文字試着改變範圍從 - 標準 - '爲setSelection(0,0)' – Tautvydas
一樣。我的'TextWatcher'修改'afterTextChanged'方法中的文本,如果改變選項的計數爲'Text Changed',那麼這可能是問題的原因,我不知道如何解決這個問題。 –