EditText හි පෙළ අවසානයේ කර්සරය තබන්න


900

මම අගය වෙනස් වෙනවා EditTextමත keyListener.

නමුත් මම පෙළ වෙනස් කරන විට කර්සරය ආරම්භයට ගමන් කරයි EditText. පා the යේ අවසානයේ කර්සරය අවශ්‍යයි.

දී එම පෙළ අගට කර්සරය ගෙන යන්නේ කෙසේද EditText.


3
මටත් ඒ ප්‍රශ්නයම ආවා. නමුත් මම වඩා හොඳින් මගෙන් ඇසුවේ මෙය සිදුවන්නේ ඇයිද යන්නයි, එවිට මට කරත්තය ගෙනයාමට වඩා ගැටලුව විසඳීමට හැකි විය.
kaneda

3
ankaneda මම සම්පුර්ණයෙන්ම එකඟ වෙමි, කෙසේ වෙතත් ඔබ සත්‍ය විසඳුම එකතු කර ඇත්නම් එය ප්‍රයෝජනවත් වනු ඇත.
AgentKnopf

1
Ain සයිනොඩිස් එය සිතුවිල්ලක් පමණි. මම කීවාක් මෙන්, මම එකම ගැටලුවකට මුහුණ දුන්නෙමි, එයින් අදහස් කරන්නේ මා විසින් විසඳුම සොයාගත් බවක් නොවේ. මගේ නඩුවේදී මට EditTexts හි ගැටලුව a හි අයිතම ලෙස තිබුණි ListView. අත්හදා බැලීම් සම්බන්ධයෙන් ගත් කල, මම ListViewතරමක් සංකීර්ණ තිරිසනෙකු වන ප්‍රභව කේතයේම යම් යම් වෙනස්කම් සිදු කර ඉමුලේටරය මත පරීක්ෂා කළෙමි . එය සං component ටකය විසින් සාදන ලද නාභිගත පාලන කළමනාකරණයට සම්බන්ධ විය. ඉතින් ඇත්ත වශයෙන්ම එය අපගේ මිතුරාට උපකාර කිරීම සඳහා මට දිය හැකි විසඳුමක් නොවේ. :)
kaneda


OnFocusChangedඇමතුම් ලබා ගැනීමේදී මෙය ක්‍රියා නොකරයි . එහි ඇති විසඳුම වන්නේ setSelection ධාවනය කළ හැකි ඇතුළත තබා එය ප්‍රධාන නූල් මත ධාවනය කිරීමයි. මෙහි පරීක්ෂා කරන්න stackoverflow.com/a/32156989/4514796
අලි නෙම්

Answers:


1333

මේක උත්සාහ කරන්න:

EditText et = (EditText)findViewById(R.id.inbox);
et.setSelection(et.getText().length());

15
මෙය මගේ නඩුවේ ක්‍රියාත්මක නොවේ. SetSelection () ක්‍රමයට කිසිදු බලපෑමක් නොමැති බව පෙනේ. මගේ EditText දර්ශනයේ ImageSpans අඩංගු වේ. වෙනත් ආකාරයක ක්‍රියාකාරිත්වයක් තිබේද?
toobsco42

@ මාක්ස්, මට එකම ප්‍රශ්නයක් තිබූ අතර මා වෙනුවෙන් පරිපූර්ණව වැඩ කළේය. මම ඩයලොග් එකක සංස්කරණ ටෙක්ස්ට් භාවිතා කරමින් ප්‍රධාන තිරයෙන් පෙළ ජනනය කළෙමි. එය සිදු වූ විට කර්සරය රැඳී සිටියේ ආරම්භයේ නොව අවසානයේ නොවේ, නමුත් මම ඔබේ යෝජනාව උත්සාහ කිරීමෙන් පසු සියල්ල හොඳයි, මට අවශ්‍ය ආකාරයට. මෙය පළ කිරීම ගැන ස්තූතියි.
වින්සි

4
හේයි ul මුල්ලේ, මම දැන් එය onSelectionChanged()EditTextpublic void onSelectionChanged(int start, int end) { CharSequence text = getText(); if (text != null) { if (start != text.length() || end != text.length()) { setSelection(text.length(), text.length()); return; } } super.onSelectionChanged(start, end); }
හසුරුවන්නේ

20
පෝලිමට පිවිසීම සඳහා ඔබට et.post (නව ධාවනය කළ හැකි ({... et.setSel ...) භාවිතා කිරීමට සිදුවනු ඇත. මෙයට හේතුව ඇන්ඩ්‍රොයිඩ් පෝස්ට් කිරීමෙන් වඩා හොඳ කාලයක් ලැබෙන තෙක් පිරිසැලසුම් දේවල් කිරීමට බලා සිටීමයි. පද්ධතිය අවසන් වීමට පෙර එය ඔබගේ කාර්යය අහෝසි කරනු ඇත.
මින්ස්මන්

1
එය මෙහි ක්‍රියාත්මක වේ, ඔබගේ පිළිතුරට ස්තූතියි.නමුත් ඔබ මේ ආකාරයට කළ යුතුය: editText.setText (ය); editText.setSelection (editText.getText (). දිග ()); // setText පසු
smileVann

227

වත්මන් සංස්කරණ පෙළ අගයට නූල් අගය එකතු කරන අතර කර්සරය අගය අවසානයේ තබන එඩිටෙක්ස්ට් සඳහා ඇපෙන්ඩ් යනුවෙන් ශ්‍රිතයක් ඇත. වත්මන් එඩිටෙක්ස්ට් අගය ලෙස ඔබට නූල් අගය තිබිය හැකි අතර ඇපෙන්ඩ් () අමතන්න;

myedittext.append("current_this_edittext_string"); 

1
ඔබේ සංස්කරණ පෙළෙහි දැනටමත් පෙළ තිබේ නම්, ලියන්නmyedittext.append("");
ymerdrengene

4
merymerdrengene අයදුම් myedittext.append("");කිරීම මට වැඩ කළේ නැත!
චින්තාන් ෂා

4
මෙය පරිපූර්ණ වූයේ එය මා සතුව තිබූ කේත රේඛාව ප්‍රතිස්ථාපනය කරන බැවිනි. Edittextfield.setText භාවිතා කරමින් එය එකතු කිරීම සඳහා මාරු කර ඇත. හරිම සරලයි.
theblitz

එය ක්‍රියාත්මක වන්නේද නැද්ද යන්න භාවිතය මත රඳා පවතී. මට එය එසේ නොවීය. භාවිතා Selectionකිරීම එම IMO සාක්ෂාත් කර ගැනීම සඳහා නිවැරදි ක්‍රමයයි.
sud007

146

කොට්ලින් :

කර්සරය ආරම්භක ස්ථානයට සකසන්න :

val editText = findViewById(R.id.edittext_id) as EditText
editText.setSelection(0)

EditText අවසානයට කර්සරය සකසන්න :

val editText = findViewById(R.id.edittext_id) as EditText
editText.setSelection(editText.text.length)

පහත කේතය වන්නේ දෙවන අක්‍ෂරයෙන් පසුව කර්සරය තැබීමයි :

val editText = findViewById(R.id.edittext_id) as EditText
editText.setSelection(2)

ජාවා :

කර්සරය ආරම්භක ස්ථානයට සකසන්න :

 EditText editText = (EditText)findViewById(R.id.edittext_id);
 editText.setSelection(0);

EditText අවසානයට කර්සරය සකසන්න :

EditText editText = (EditText)findViewById(R.id.edittext_id);
editText.setSelection(editText.getText().length());

පහත කේතය වන්නේ දෙවන අක්‍ෂරයෙන් පසුව කර්සරය තැබීමයි :

EditText editText = (EditText)findViewById(R.id.edittext_id);
editText.setSelection(2);

1
භාවිතා කරන්නේ නම් වාත්තු කිරීම ප්‍රතිස්ථාපනය findViewById(R.id.edittext_id) as EditTextකිරීමට findViewById<EditText>(R.id.edittext_id)හෝ වළක්වා ගත හැකියAPI 26+
Evin1_

107

ඔබ setTextකලින් ඇමතුවේ නම් සහ නව පෙළට setSelectionවෙනම ධාවනය කළ හැකි වෙඩි තැබීමකින් පිරිසැලසුම් අදියර ඇමතුමක් නොලැබුනේ නම් View.post(Runnable)( මෙම මාතෘකාවෙන් නැවත තැපැල් කරන්න ).

ඉතින්, මට නම් මෙම කේතය ක්‍රියාත්මක වේ:

editText.setText("text");
editText.post(new Runnable() {
         @Override
         public void run() {
             editText.setSelection(editText.getText().length());
         }
});

සංස්කරණය 05/16/2019: දැන් මම ඒ සඳහා කොට්ලින් දිගුව භාවිතා කරමි:

fun EditText.placeCursorToEnd() {
    this.setSelection(this.text.length)
}

ඉන්පසු - editText.placeCursorToEnd ().


ස්තූතියි මේක මට ඇත්තටම වැඩ කළා. මම setSelection අමතන්න උත්සාහ කළ නමුත් එය ක්‍රියා නොකරනු ඇත. මගේ නඩුවේදී, මම පෙළ සංස්කරණය කිරීම සඳහා ස්ථාවර උපසර්ගයක් සැකසීමට උත්සාහ කළ අතර, උපසර්ගය සැකසීමෙන් පසුව, කර්සරය උපසර්ගයේ අවසානයට සැකසීමට අවශ්‍ය වූ අතර එමඟින් පරිශීලකයාට උපසර්ගයෙන් පසුව දත්ත ඇතුළත් කළ හැකිය. මම පෙළ වොචරයක ඉදිකිරීම්කරු ලෙස setSelection කරමින් සිටි බැවින්, එය ක්‍රියාත්මක නොවීමට හේතුව එය විය හැකිය. නමුත් ඔබේ විසඳුම විශිෂ්ටයි!
වැන්ඩ් මේකර්

මම මෙම පෝස්ට් ක්‍රමය මගේ MultiAutoCompleteTextView හි Clickablespan ක්‍රමයේදී භාවිතා කරන අතර එය ක්‍රියාත්මක වේ ..... පෙළ පරතරයේ මකාදැමීමේ නිරූපකය ක්ලික් කළ පසු කර්සරය අවසානයේ චලනය වීමට මට අවශ්‍යය ... එය සියලුම නවතම ඇන්ඩ්‍රොයිඩ් මොබයිල් වල ක්‍රියා කරයි. ..නමුත් පැරණි අනුවාද වල පළමු ක්ලික් කිරීමෙන් පසුව යම් කාලයක් ගතවේ ... මගේ අනෙක් සියලුම අයිතම ක්ලික් කළ නොහැක ... කිසියම් හෝඩුවාවක් ??
විජයරාජ්

1
එයට හේතුව මම නොදනිමි, නමුත් මෙය මට වැඩ කරන එකම එකයි! මගේ සංස්කරණ පා text යට නාභිගත / පෙළ වෙනස් කළ සවන්දෙන්නෙකු සිටින අතර එය පෙළ ඉන්පුට්ලයිට් වලින් ඔතා ඇත. එයින් එකක් නම් එය අවුල් කිරීමයි.
ඩැනියෙල් විල්සන්

42

ඔබට කර්සරය පෙළ අවසානයේ මේ ආකාරයට දැක්විය හැකිය EditText:

EditText et = (EditText)findViewById(R.id.textview);
int textLength = et.getText().length();
et.setSelection(textLength, textLength);

28
editText.setOnKeyListener(new View.OnKeyListener() {
    @Override
    public boolean onKey(View v, int keyCode, KeyEvent event) {
        editText.setSelection(editText.getText().length());
        return false;
    }
});

21

මෙය කළ හැකි තවත් විසඳුමකි:

et.append("");

කිසියම් හේතුවක් නිසා එය ක්‍රියාත්මක නොවන්නේ නම් මෙම විසඳුම උත්සාහ කරන්න:

et.setSelection(et.getText().length());

12
/**
 * Set cursor to end of text in edittext when user clicks Next on Keyboard.
 */
View.OnFocusChangeListener onFocusChangeListener = new View.OnFocusChangeListener() {
    @Override
    public void onFocusChange(View view, boolean b) {
        if (b) {
            ((EditText) view).setSelection(((EditText) view).getText().length());
        }
    }
};

mEditFirstName.setOnFocusChangeListener(onFocusChangeListener); 
mEditLastName.setOnFocusChangeListener(onFocusChangeListener);

එය මට හොඳට වැඩ කරයි!


12

මගේ නඩුවේදී මම පහත කෝට්ලින් දිගුව නිර්මාණය කළෙමි. ශ්‍රිතය යමෙකුට ප්‍රයෝජනවත් විය හැකිය

 private fun EditText.focus(){
        requestFocus()
        setSelection(length())
    }

ඉන්පසු පහත පරිදි භාවිතා කරන්න

mEditText.focus()


11

EditText'sක්‍රමයේ ආධාරයෙන් ඔබට එය සාක්ෂාත් කර ගැනීමට හැකි විය යුතුය setSelection(), මෙහි බලන්න


10

මම හිතන්නේ මෙය ඔබට අවශ්‍ය දේ සපුරා ගත හැකිය.

 Editable etext = mSubjectTextEditor.getText();
 Selection.setSelection(etext, etext.length());

මගේ නිරීක්ෂණ නිවැරදි නම්, මෙය android.widget.TextView $ IClipboardDataPasteEventImpl එක් එක් විජට් සඳහා උදාහරණයක් සපයයි. මම ඒවා ටොන් ගණනකින් අවසන් කළා. පෙනෙන විදිහට ඒවා අවසානයේදී පිරිසිදු වන නමුත් මතක පරිභෝජනය වේගවත් කරයි. මට එක් දෙබසක අවස්ථා 12 ක් තිබුණි, එය ඉහත සඳහන් කළ අවස්ථාව වන්නේ එය අධිපති (එය පණපිටින් තබා ගැනීම) පමණි.
AgentKnopf

එම කේත කැබැල්ල කේතයේ සුදුසු ස්ථානයක තැබීම (ඔබ පෙළ කෙලින්ම EText වෙත එකතු කරන තැන). ස්තූතියි!
sud007

9

ප්‍රශ්නය පරණ සහ පිළිතුරු ඇත, නමුත් ඇන්ඩ්‍රොයිඩ් සඳහා අලුතින් නිකුත් කරන ලද දත්ත බන්ධන මෙවලම් භාවිතා කිරීමට ඔබට අවශ්‍ය නම් මෙම පිළිතුර ලබා ගැනීම ප්‍රයෝජනවත් යැයි මම සිතමි, මෙය ඔබේ XML හි සකසන්න:

<data>
    <variable name="stringValue" type="String"/>
</data>
...
<EditText
        ...
        android:text="@={stringValue}"
        android:selection="@{stringValue.length()}"
        ...
/>

6

රූප විස්තරය මෙහි ඇතුළත් කරන්න

හෙලෝ මෙය උත්සාහ කරන්න

 <EditText
       android:id="@+id/edt_text"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:text="Hello World!"
       android:cursorVisible="true"/>

EditText editText = findViewById(R.id.editText); editText.setSelection(editText.getText().length()); // End pointකර්සරය


5

ඔබට සියලු පෙළ තෝරාගෙන පැරණි පෙළ වෙනුවට නව පෙළ ඇතුළත් කිරීමට අවශ්‍ය නම් ඔබට භාවිතා කළ හැකිය

    android:selectAllOnFocus="true"


5

editText.setSelectionමෙතන මැජික් එක. මූලික වශයෙන් තේරීම මඟින් ඔබට අවශ්‍ය ඕනෑම ස්ථානයක කර්සරය ස්ථානගත කරයි.

EditText editText = findViewById(R.id.editText);
editText.setSelection(editText.getText().length());

මෙය කර්ටරය EditText අවසානය දක්වා තබයි. මූලික වශයෙන් editText.getText().length()ඔබට පෙළ දිග ලබා දෙයි. එවිට ඔබ setSelectionදිග සමඟ භාවිතා කරයි.

editText.setSelection(0);

එය ආරම්භක ස්ථානයේ (0) කර්සරය සැකසීම සඳහා ය.


4

මා විසින් පරීක්‍ෂා කරන ලද අනෙකුත් සියලුම කේතයන් ක්‍රියා නොකරන්නේ පරිශීලකයාට තවමත් මැදිරියේ කොතැනක හෝ කරත්තය / කර්සරය තැබිය හැකි බැවිනි (උදා: 12 | 3.00 - කොහෙද | කර්සරය). EditText හි ස්පර්ශය ඇති වූ සෑම විටම මගේ විසඳුම කර්සරය නූල් අවසානයේ තබයි.

අවසාන විසඳුම නම්:

// For a EditText like:
<EditText
                android:id="@+id/EditTextAmount"
                android:layout_height="wrap_content"
                android:layout_width="fill_parent"
                android:hint="@string/amount"
                android:layout_weight="1"
                android:text="@string/zero_value"
                android:inputType="text|numberDecimal"
                android:maxLength="13"/>

@ string / amount = "0.00" @ string / zero_value = "0.00"

// Create a Static boolean flag
private static boolean returnNext; 


// Set caret/cursor to the end on focus change
EditTextAmount.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View editText, boolean hasFocus) {
                if(hasFocus){
                    ((EditText) editText).setSelection(((EditText) editText).getText().length());
                }
            }
        });

// Create a touch listener and put caret to the end (no matter where the user touched in the middle of the string)
EditTextAmount.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View editText, MotionEvent event) {
                ((EditText) editText).onTouchEvent(event);
                ((EditText) editText).setSelection(((EditText) editText).getText().length());
                return true;
            }
        });


// Implement a Currency Mask with addTextChangedListener
EditTextAmount.addTextChangedListener(new TextWatcher() {
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                String input = s.toString();
                String output = new String();
                String buffer = new String();
                String decimals = new String();
                String numbers = Integer.toString(Integer.parseInt(input.replaceAll("[^0-9]", "")));

                if(returnNext){
                    returnNext = false;
                    return;
                }

                returnNext = true;

                if (numbers.equals("0")){
                    output += "0.00";
                }
                else if (numbers.length() <= 2){
                    output += "0." + String.format("%02d", Integer.parseInt(numbers));
                }
                else if(numbers.length() >= 3){
                    decimals = numbers.substring(numbers.length() - 2);
                    int commaCounter = 0;
                    for(int i=numbers.length()-3; i>=0; i--){
                        if(commaCounter == 3){
                            buffer += ",";
                            commaCounter = 0;
                        }
                        buffer += numbers.charAt(i);
                        commaCounter++;
                    }
                    output = new StringBuilder(buffer).reverse().toString() + "." + decimals;
                }
                EditTextAmount.setText(output);
                EditTextAmount.setSelection(EditTextAmount.getText().length());
            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                /*String input = s.toString();
                if(input.equals("0.0")){
                    EditTextAmount.setText("0.00");
                    EditTextAmount.setSelection(EditTextAmount.getText().length());
                    return;
                }*/
            }

            @Override
            public void afterTextChanged(Editable s) {

            }
        });

එය උපකාරී වේ යැයි සිතමු!


3

ViewModel, LiveData සහ දත්ත බන්ධනය සඳහා

EditTextමගේ සටහන් යෙදුමේ බහුකාර්ය සහාය ඇතිව මට මෙම ක්‍රියාකාරීත්වය අවශ්‍ය විය . පරිශීලකයා සටහන් පෙළ ඇති කැබැල්ලට සැරිසැරූ විට මට පෙළ අවසානයේ කර්සරය අවශ්‍ය විය.

Djleop විසින් යෝජනා කරන ලද විසඳුම සමීප වේ. නමුත් මෙහි ඇති ගැටළුව නම්, පරිශීලකයා කර්සරය සංස්කරණය සඳහා පෙළ මැද කොතැනක හෝ තබා ටයිප් කිරීම ආරම්භ කළහොත් කර්සරය නැවත පෙළ අවසානයට පනින්න. මෙය සිදු වූයේ LiveDataනව අගය විමෝචනය වන අතර කර්සරය නැවත පා of යේ අවසානයට පනින නිසා පරිශීලකයාට කොතැනක හෝ පෙළ සංස්කරණය කිරීමට නොහැකි වනු ඇත.

මෙම විසඳීම සඳහා මම භාවිතා MediatorLiveDataසහ එය දිග අනුයුක්ත Stringධජ භාවිතා එක් වරක් පමණයි. මෙය LiveData අගය කියවීමට එක් වරක් පමණක් හේතු වේ, එනම් පරිශීලකයා කැබැල්ලට සැරිසැරූ විට. ඉන්පසු පරිශීලකයාට කර්සරය පෙළ සංස්කරණය කිරීමට අවශ්‍ය ඕනෑම තැනක තැබිය හැකිය.

ViewModel

private var accessedPosition: Boolean = false

val cursorPosition = MediatorLiveData<Event<Int>>().apply {
    addSource(yourObject) { value ->
        if(!accessedPosition) {
            setValue(Event(yourObject.note.length))
            accessedPosition = true
        }
    }
}

මෙන්න, yourObjectඔබ පෙන්වන සංගීත පෙළ රඳවා ඇති දත්ත සමුදායෙන් ලබාගත් තවත් සජීවී දත්තයකි EditText.

ඉන්පසු මෙය MediatorLiveDataබන්ධන ඇඩැප්ටරය භාවිතයෙන් ඔබේ සංස්කරණයට සම්බන්ධ කරන්න.

XML

පෙළ ප්‍රදර්ශනය කිරීම සඳහා මෙන්ම පෙළ ආදානය පිළිගැනීම සඳහා ද්වි-මාර්ග දත්ත බන්ධනයක් භාවිතා කරයි.

<!-- android:text must be placed before cursorPosition otherwise we'll get IndexOutOfBounds exception-->
<EditText
    android:text="@={viewModel.noteText}"
    cursorPosition="@{viewModel.cursorPosition}" />

බන්ධන ඇඩැප්ටරය

@BindingAdapter("cursorPosition")
fun bindCursorPosition(editText: EditText, event: Event<Int>?) {
    event?.getContentIfNotHandled()?.let { editText.setSelection(it) }
}

Event පන්තිය

මෙහි Eventපන්තිය ගූගල් වෙතින් ජෝස් ඇල්කෙරෙකා විසින් ලියන ලද සිංගල් ලයිව්එවෙන්ට් වැනි ය . තිර භ්‍රමණය ගැන සැලකිලිමත් වීමට මම එය මෙහි භාවිතා කරමි. තනි භාවිතා කිරීමෙන් Eventපරිශීලකයා පෙළ කොතැනක හෝ සංස්කරණය කර තිරය භ්‍රමණය වන විට කර්සරය පෙළ අවසානයට නොයන බවට සහතික වේ. තිරය ​​භ්‍රමණය වන විට එය එකම ස්ථානයක් පවත්වා ගනී.

මෙන්න Eventපන්තිය:

open class Event<out T>(private val content: T) {

    var hasBeenHandled = false
        private set // Allow external read but not write

    /**
     * Returns the content and prevents its use again.
     */
    fun getContentIfNotHandled(): T? {
        return if (hasBeenHandled) {
            null
        } else {
            hasBeenHandled = true
            content
        }
    }

    /**
     * Returns the content, even if it's already been handled.
     */
    fun peekContent(): T = content
}

මෙය මට වැඩ කරන සහ හොඳ පරිශීලක අත්දැකීමක් ලබා දෙන විසඳුමයි. එය ඔබගේ ව්‍යාපෘති සඳහා ද උපකාරී වේ යැයි සිතමු.


1
මෙම පිළිතුර ඉහළට යා යුතුය. බොහෝ ස්තූතියි
අබ්දුල් රහ්මාන් ෂමෙයාර්

2

n ආන් ඩුයිගේ පිළිතුරට සමානය, නමුත් එය මට සාර්ථක වූයේ නැත. කර්සරය අවසානයට ගෙනයාමට අවශ්‍ය වූයේ පරිශීලකයා සංස්කරණ පෙළ තට්ටු කළ විටත් පසුව කර්සරයේ පිහිටීම තෝරා ගැනීමටත් හැකි වූ විට පමණි, මෙය මා වෙනුවෙන් වැඩ කළ එකම කේතයයි

boolean textFocus = false; //define somewhere globally in the class

//in onFinishInflate() or somewhere
editText.setOnTouchListener(new OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {

        editText.onTouchEvent(event);

        if(!textFocus) {
            editText.setSelection(editText.getText().length());
            textFocus = true;
        }

        return true;
    }
});

editText.setOnFocusChangeListener(new OnFocusChangeListener() {
    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        textFocus = false;
    }
});



2

ඉහත පිළිතුරු මට ප්‍රයෝජනවත් නොවීය. එබැවින් මම නව විසඳුමක් සොයා ගතිමි. මෙය යමෙකුට ප්‍රයෝජනවත් විය හැකිය. මම වර්තමාන දිනය අනුව ඇන්ඩ්‍රොයිඩ් ස්ටුඩියෝ හි නවතම අනුවාදය එනම් 3.5 භාවිතා කර ඇත. ඉහත පිළිතුරු කිසිදු බලපෑමක් නොපෙන්වීමට හේතුව එය විය හැකිය.

කේතය:

EditText available_seats = findViewById(R.id.available_seats);
Selection.setSelection(available_seats.getText(),available_seats.getText().length());

මෙන්න, 1 වන තර්කය ඔබට සෙල්ලම් කිරීමට අවශ්‍ය ස්පැනබල් පෙළ අගය වන අතර 2 වන තර්කය දර්ශක අගය වේ. පා of යේ අවසානයේ අපට කර්සරය අවශ්‍ය බැවින්, අපි getText () දිග () ලබා ගත් අතර එය පෙළෙහි දිග ලබා දෙයි


1
මගේ සතුට! සුබ කේතීකරණයක්!
ප්‍රජ්වාල් ඩබ්

1
public class CustomEditText extends EditText {
    public CustomEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public CustomEditText(Context context) {
        super(context);
    }

    public CustomEditText(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }


    @Override
    protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {
        super.onFocusChanged(focused, direction, previouslyFocusedRect);
        this.setSelection(this.getText().length());
    }

    @Override
    protected void onSelectionChanged(int selStart, int selEnd) {

    }
}

ඔබගේ XML ගොනුවේ මෙම CustomEditText භාවිතා කරන්න, මෙය ක්‍රියාත්මක වේ. මම මෙය අත්හදා බලා ඇති අතර එය මට වැඩ කරයි.


1

ඔබට කර්සරය පෙළ අවසානයේ සංස්කරණ ටෙක්ස්ට් දර්ශනයේ තැබීමට අවශ්‍ය නම්

 EditText rename;
 String title = "title_goes_here";
 int counts = (int) title.length();
 rename.setSelection(counts);
 rename.setText(title);
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.