android - EditText এ পাঠ্যের শেষে কার্সার রাখুন




android-edittext keylistener (16)

আমি keyListener একটি keyListener এর মান পরিবর্তন করছি।

কিন্তু যখন আমি টেক্সটটি পরিবর্তন করি তখন কার্সারটি EditText শুরুতে চলে যাচ্ছে। আমি টেক্সট শেষে হতে কার্সার প্রয়োজন।

একটি সম্পাদনা পাঠ্যতে পাঠ্যের শেষে কার্সারটি কীভাবে সরাতে হবে।


@ এহান ডুয়ের উত্তরের মতো, কিন্তু এটি আমার জন্য কাজ করে নি। আমি কার্সারটি শেষ পর্যন্ত সরানোর জন্যও প্রয়োজনীয় ছিলাম যখন ব্যবহারকারী সম্পাদনা পাঠটি ট্যাপ করে এবং পরেও কার্সারের অবস্থান নির্বাচন করতে সক্ষম হবেন, এই একমাত্র কোড যা আমার জন্য কাজ করেছে

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;
    }
});

Ediitext এর জন্য অ্যাডেন্ড নামে একটি ফাংশন রয়েছে যা বর্তমান সংস্করণ মানের স্ট্রিং মান যুক্ত করে এবং মান শেষে কার্সার রাখে। আপনি বর্তমান ediitext মান হিসাবে স্ট্রিং মান থাকতে পারে এবং যোগ append ();

myedittext.append("current_this_edittext_string"); 

আপনি EditText ভিউতে পাঠ্যের শেষে কার্সার স্থাপন করতে চান

 EditText rename;
 String title = "title_goes_here";
 int counts = (int) title.length();
 rename.setSelection(counts);
 rename.setText(title);

আপনি এটি সম্পাদনা করতে সক্ষম হবেন সম্পাদনাটেক্টের পদ্ধতি সেট সিলেকশন (), here


আমার ক্ষেত্রে আমি নিম্নলিখিত কোটলিন এক্সটেনশন তৈরি। ফাংশন, কেউ দরকারী হতে পারে

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

তারপর অনুসরণ হিসাবে ব্যবহার করুন

mEditText.focus()

আমি এই আপনি চান কি অর্জন করতে পারেন।

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

এই নিরাপদে কৌশল করে না:

    editText.setText("");
    if (!TextUtils.isEmpty(text)) {
        editText.append(text);
    }

এইটা কাজ করে

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

এটি আরেকটি সম্ভাব্য সমাধান:

et.append("");

এটি কোনও কারণে কাজ না করলেই এই সমাধানটি চেষ্টা করুন:

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

প্রশ্ন পুরানো এবং উত্তর দেওয়া হয়েছে, তবে আমি মনে করি এটির উত্তর দেওয়ার জন্য এটি কার্যকর হতে পারে যদি আপনি Android এর জন্য নতুন প্রকাশিত ডেটাবাইন্ডিং সরঞ্জামগুলি ব্যবহার করতে চান তবে এটি কেবল আপনার XML এ সেট করুন:

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

যদি আপনি আগে setText setSelection কল করেন এবং নতুন পাঠ্যটি লেআউট ফেজ না পায় তবে setSelection View.post(Runnable) দ্বারা বহিস্কার করা একটি পৃথক View.post(Runnable) this বিষয় থেকে পুনরায় পোস্ট করুন)।

সুতরাং, আমার জন্য এই কোড কাজ করে:

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

হ্যালো এই চেষ্টা করুন

 <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 EditText editText = findViewById(R.id.editText); editText.setSelection(editText.getText().length()); // End point কার্সার


কোটলিন :

কার্সারটি শুরু অবস্থানে সেট করুন:

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.getText().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);

/**
 * 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);

এটা আমার জন্য ভাল কাজ!


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

EditText editText=findViewById(R.id.et_id);

editText.requestFocus();




keylistener