আমি @ জেফের সমাধানটি 4.2, 4.4, 6.0 সংস্করণে পরীক্ষা করেছি। 4.2 এবং 6.0 এ, এটি ভালভাবে কাজ করে। তবে ৪.৪-তে এটি কার্যকর হয় না।
আমি এই সমস্যাটি ঘিরে কাজ করার একটি সহজ উপায় পেয়েছি। মূল বিষয়টি হ'ল শুরুতে সম্পাদনা পাঠের সামগ্রীটিতে একটি অদৃশ্য চরিত্র sertোকানো এবং ব্যবহারকারীকে এই চরিত্রের আগে কার্সারটি সরাতে না দিন। আমার উপায়টি হল শূন্য প্রস্থের একটি ইমেজস্প্যান সহ একটি সাদা-স্পেস অক্ষর characterোকানো। এখানে আমার কোড।
@Override
public void afterTextChanged(Editable s) {
String ss = s.toString();
if (!ss.startsWith(" ")) {
int selection = holder.editText.getSelectionEnd();
s.insert(0, " ");
ss = s.toString();
holder.editText.setSelection(selection + 1);
}
if (ss.startsWith(" ")) {
ImageSpan[] spans = s.getSpans(0, 1, ImageSpan.class);
if (spans == null || spans.length == 0) {
s.setSpan(new ImageSpan(getResources().getDrawable(R.drawable.zero_wdith_drawable)), 0 , 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
}
এবং আমাদের পছন্দসই একটি সম্পাদনা পাঠ্য প্রয়োজন যার একটি নির্বাচনকেন্দ্রলিস্টনার রয়েছে
public class EditTextSelectable extends android.support.v7.widget.AppCompatEditText {
public interface OnSelectChangeListener {
void onSelectChange(int start, int end);
}
private OnSelectChangeListener mListener;
public void setListener(OnSelectChangeListener listener) {
mListener = listener;
}
...constructors...
@Override
protected void onSelectionChanged(int selStart, int selEnd) {
if (mListener != null) {
mListener.onSelectChange(selStart, selEnd);
}
super.onSelectionChanged(selStart, selEnd);
}
}
এবং শেষ পদক্ষেপ
holder.editText.setListener(new EditTextSelectable.OnSelectChangeListener() {
@Override
public void onSelectChange(int start, int end) {
if (start == 0 && holder.editText.getText().length() != 0) {
holder.editText.setSelection(1, Math.max(1, end));
}
}
});
এবং এখন, আমরা সম্পন্ন করেছি Edit এডিট টেক্সটের কোনও আসল সামগ্রী না থাকলে আমরা ব্যাকস্পেস কী ইভেন্টটি সনাক্ত করতে পারি এবং ব্যবহারকারী আমাদের কৌশল সম্পর্কে কিছুই জানতে পারবেন না।