আপনি ছেলেরা যেমন খুঁজছিল তেমন আমি কিছু করেছি। এখানে আমার LimitedEditText
ক্লাস।
বৈশিষ্ট্য:
- আপনি আপনার লিমিটেড এডিটটেক্সট উপাদানটিতে লাইন গণনা সীমাবদ্ধ করতে পারেন
- আপনি আপনার লিমিটেডএডিটটেক্সট উপাদানটিতে অক্ষর গণনা সীমাবদ্ধ করতে পারেন
- আপনি যদি পাঠ্যের মাঝখানে কোথাও অক্ষর বা রেখার সীমা অতিক্রম করেন তবে কার্সার
আপনাকে শেষ পর্যন্ত আনবে না - এটি যেখানে থাকবে আপনি সেখানেই থাকবেন।
আমি শ্রোতাদের বন্ধ করছি, কারণ প্রতিটি কল setText()
যখন ব্যবহারকারী প্রতিটি অক্ষর বা রেখার সীমা অতিক্রম করে তখন পদ্ধতির পুনরাবৃত্তভাবে এই 3 টি কলব্যাক পদ্ধতি কল করে।
কোড:
import android.content.Context;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.AttributeSet;
import android.util.Log;
import android.widget.EditText;
import android.widget.Toast;
/**
* EditText subclass created to enforce limit of the lines number in editable
* text field
*/
public class LimitedEditText extends EditText {
/**
* Max lines to be present in editable text field
*/
private int maxLines = 1;
/**
* Max characters to be present in editable text field
*/
private int maxCharacters = 50;
/**
* application context;
*/
private Context context;
public int getMaxCharacters() {
return maxCharacters;
}
public void setMaxCharacters(int maxCharacters) {
this.maxCharacters = maxCharacters;
}
@Override
public int getMaxLines() {
return maxLines;
}
@Override
public void setMaxLines(int maxLines) {
this.maxLines = maxLines;
}
public LimitedEditText(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
this.context = context;
}
public LimitedEditText(Context context, AttributeSet attrs) {
super(context, attrs);
this.context = context;
}
public LimitedEditText(Context context) {
super(context);
this.context = context;
}
@Override
protected void onFinishInflate() {
super.onFinishInflate();
TextWatcher watcher = new TextWatcher() {
private String text;
private int beforeCursorPosition = 0;
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
//TODO sth
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
text = s.toString();
beforeCursorPosition = start;
}
@Override
public void afterTextChanged(Editable s) {
/* turning off listener */
removeTextChangedListener(this);
/* handling lines limit exceed */
if (LimitedEditText.this.getLineCount() > maxLines) {
LimitedEditText.this.setText(text);
LimitedEditText.this.setSelection(beforeCursorPosition);
}
/* handling character limit exceed */
if (s.toString().length() > maxCharacters) {
LimitedEditText.this.setText(text);
LimitedEditText.this.setSelection(beforeCursorPosition);
Toast.makeText(context, "text too long", Toast.LENGTH_SHORT)
.show();
}
/* turning on listener */
addTextChangedListener(this);
}
};
this.addTextChangedListener(watcher);
}
}