EditText
ক্রস বোতামযুক্ত এমন কোনও উইজেট রয়েছে কিম্বা এমন কোনও সম্পত্তি রয়েছে EditText
যার দ্বারা এটি স্বয়ংক্রিয়ভাবে তৈরি হয়ে যায়? আমি ক্রস বোতামটি যা লেখা আছে তা মুছে ফেলতে চাই EditText
।
EditText
ক্রস বোতামযুক্ত এমন কোনও উইজেট রয়েছে কিম্বা এমন কোনও সম্পত্তি রয়েছে EditText
যার দ্বারা এটি স্বয়ংক্রিয়ভাবে তৈরি হয়ে যায়? আমি ক্রস বোতামটি যা লেখা আছে তা মুছে ফেলতে চাই EditText
।
উত্তর:
নিম্নলিখিত লেআউটটি ব্যবহার করুন:
<FrameLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="9dp"
android:padding="5dp">
<EditText
android:id="@+id/calc_txt_Prise"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:inputType="numberDecimal"
android:layout_marginTop="20dp"
android:textSize="25dp"
android:textColor="@color/gray"
android:textStyle="bold"
android:hint="@string/calc_txt_Prise"
android:singleLine="true" />
<Button
android:id="@+id/calc_clear_txt_Prise"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="10dp"
android:layout_gravity="right|center_vertical"
android:background="@drawable/delete" />
</FrameLayout>
আপনি বোতামের আইডিও ব্যবহার করতে পারেন এবং এর অন ক্লিককলিস্টার পদ্ধতিতে আপনি যা কিছু করতে চান তা করতে পারেন।
আপনি যদি ড্রয়েড পার্টস ব্যবহার করে থাকেন তবে আমি সবেমাত্র ক্লিয়ারেএলডিটেক্সট যুক্ত করেছি ।
কাস্টম ব্যাকগ্রাউন্ড এবং অ্যাকশনবার শেরলকabs__ic_clear_holo_light
থেকে সেট করা পরিষ্কার আইকন দিয়ে দেখতে এটি দেখতে এখানে :
EditText
। Thx @yanchenko
অ্যান্ড্রয়েডের জন্য মেটালিয়াল ডিজাইনের উপাদানগুলির মাধ্যমে 2020 সমাধান:
আপনার গ্রেড সেটআপে উপাদান উপাদান যুক্ত করুন:
এখান থেকে সর্বশেষ সংস্করণটি দেখুন: https://maven.google.com/
implementation 'com.google.android.material:material:1.1.0'
বা যদি আপনি অ্যান্ড্রয়েডএক্স লিবস ব্যবহার করে আপডেট না করে থাকেন তবে আপনি এটিকে এটি যুক্ত করতে পারেন:
implementation 'com.android.support:design:28.0.0'
তারপর
<com.google.android.material.textfield.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/hint_text"
app:endIconMode="clear_text">
<com.google.android.material.textfield.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</com.google.android.material.textfield.TextInputLayout>
মনোযোগ দিন: অ্যাপ: endIconMode = "Clear_text"
হিসাবে এখানে আলোচনা করা হয়েছে উপাদান নকশা ডক্স
<androidx.appcompat.widget.AppCompatEditText/>
? আপনি কি আমাকে দয়া করে একইভাবে সাহায্য করতে পারেন
এটি একটি কোটলিন সমাধান। এই সহায়ক সহায়কটি কিছু কোটলিন ফাইলের মধ্যে রাখুন-
fun EditText.setupClearButtonWithAction() {
addTextChangedListener(object : TextWatcher {
override fun afterTextChanged(editable: Editable?) {
val clearIcon = if (editable?.isNotEmpty() == true) R.drawable.ic_clear else 0
setCompoundDrawablesWithIntrinsicBounds(0, 0, clearIcon, 0)
}
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) = Unit
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) = Unit
})
setOnTouchListener(View.OnTouchListener { _, event ->
if (event.action == MotionEvent.ACTION_UP) {
if (event.rawX >= (this.right - this.compoundPaddingRight)) {
this.setText("")
return@OnTouchListener true
}
}
return@OnTouchListener false
})
}
এবং তারপরে এটি onCreate
পদ্ধতিতে নিম্নলিখিত হিসাবে ব্যবহার করুন এবং আপনার যেতে ভাল হবে-
yourEditText.setupClearButtonWithAction()
বিটিডাব্লু, আপনাকে R.drawable.ic_clear
প্রথমে যুক্ত করতে হবে বা পরিষ্কার আইকন। এইটি গুগল- https://matory.io/tools/icons/?icon=clear&style=baseline থেকে এসেছে
this.clearFocus()
প্রত্যাবর্তনের সত্য বিবৃতি দেওয়ার আগে onFocusChange
setCompoundDrawablesWithIntrinsicBounds(0, 0, clearIcon, 0)
। আপনি এই ফাংশনে একটি নতুন পরম হিসাবে বাম অঙ্কনযোগ্য আইকন আইডি পাস করতে পারেন এবং এটিকে কলটিতে রাখতে পারেন।
অ্যান্ড্রয়েডের সমর্থন লিবারারিতে একটি SearchView
ক্লাস রয়েছে যা এটি ঠিকভাবে করে। ( EditText
যদিও থেকে প্রাপ্ত নয়, সুতরাং একটি SearchView.OnQueryTextListener
পরিবর্তে একটি ব্যবহার করতে হবে TextWatcher
)
এক্সএমএলে এর মতো ব্যবহার করুন:
<android.support.v7.widget.SearchView
android:id="@+id/searchView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:iconifiedByDefault="false"
android:queryHint="@string/SearchHint"
app:iconifiedByDefault="false"
app:queryHint="@string/SearchHint" />
Drawable x = getResources().getDrawable(R.drawable.x);
x.setBounds(0, 0, x.getIntrinsicWidth(), x.getIntrinsicHeight());
mEditText.setCompoundDrawables(null, null, x, null);
এক্স, কোথায়:
আপনার জন্য drawable resource
স্ট্যান্ডার্ড অ্যান্ড্রয়েড চিত্রগুলি ব্যবহার করতে পারেন:
http://androiddrawables.com/Menu.html
উদাহরণ স্বরূপ :
android:background="@android:drawable/ic_menu_close_clear_cancel"
আপনি যদি কাস্টম ভিউ বা বিশেষ লেআউট ব্যবহার করতে না চান তবে আপনি (এক্স) বোতামটি তৈরি করতে 9-প্যাচ ব্যবহার করতে পারেন।
উদাহরণ: http://postimg.org/image/tssjmt97p/ (স্ট্যাকওভারফ্লোতে ছবি পোস্ট করার মতো পর্যাপ্ত পয়েন্ট আমার কাছে নেই)
ডান এবং নীচে কালো পিক্সেলগুলির ছেদটি সামগ্রী ক্ষেত্রের প্রতিনিধিত্ব করে। ওই অঞ্চলের বাইরের যে কোনও কিছুই প্যাডিং করছে। সুতরাং ব্যবহারকারী যে এক্সটিতে ক্লিক করেছে তা সনাক্ত করতে আপনি এমন একটি অনটচলিস্টাইনার সেট করতে পারেন:
editText.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
if (motionEvent.getAction() == MotionEvent.ACTION_UP){
if (motionEvent.getX()>(view.getWidth()-view.getPaddingRight())){
((EditText)view).setText("");
}
}
return false;
}
});
আপনার প্রয়োজন অনুসারে এই সমাধানটি কিছু ক্ষেত্রে আরও ভাল কাজ করতে পারে। আমি আমার এক্সএমএল কম জটিল রাখতে পছন্দ করি। আপনি বাম দিকে আইকন রাখতে চাইলে এটিও সহায়তা করে, আপনি কেবল 9 প্যাচে অন্তর্ভুক্ত করতে পারেন।
আমি নীচের মতো ইউআই অংশটি করেছি:
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="50dp"
android:layout_marginTop="9dp"
android:padding="5dp">
<EditText
android:id="@+id/etSearchToolbar"
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:textSize="13dp"
android:padding="10dp"
android:textColor="@android:color/darker_gray"
android:textStyle="normal"
android:hint="Search"
android:imeOptions="actionSearch"
android:inputType="text"
android:background="@drawable/edittext_bg"
android:maxLines="1" />
<ImageView
android:id="@+id/ivClearSearchText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginRight="6dp"
android:src="@drawable/balloon_overlay_close"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />
</RelativeLayout>
edittext_bg.xml
<?xml version="1.0" encoding="utf-8"?>
<solid android:color="#FFFFFF" />
<stroke
android:width="1dp"
android:color="#C9C9CE" />
<corners
android:bottomLeftRadius="15dp"
android:bottomRightRadius="15dp"
android:topLeftRadius="15dp"
android:topRightRadius="15dp" />
ক্রস / ক্লিয়ার বোতাম হাইড / শো:
searchBox.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
if(charSequence.length() > 0){
clearSearch.setVisibility(View.VISIBLE);
}else{
clearSearch.setVisibility(View.GONE);
}
}
@Override
public void afterTextChanged(Editable editable) {}
});
অনুসন্ধানের স্টাফগুলি হ্যান্ডেল করুন (অর্থাত্ ব্যবহারকারী যখন সফট কী বোর্ড থেকে অনুসন্ধান করেন)
searchBox.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_SEARCH) {
String contents = searchBox.getText().toString().trim();
if(contents.length() > 0){
//do search
}else
//if something to do for empty edittext
return true;
}
return false;
}
});`
সাফ / ক্রস বোতাম
clearSearch.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
searchBox.setText("");
}
});
ব্যবহার
android:drawableRight="@android:drawable/ic_input_delete"
উইজেটের সাথে এখানে সম্পূর্ণ লাইব্রেরি রয়েছে: https://github.com/opprime/EditTextField
এটি ব্যবহার করতে আপনার নির্ভরতা যুক্ত করা উচিত:
compile 'com.optimus:editTextField:0.2.0'
লেআউট.এক্সএমএল ফাইলটিতে আপনি উইজেট সেটিংসের সাথে খেলতে পারেন:
xmlns:app="http://schemas.android.com/apk/res-auto"
অ্যাপ্লিকেশন: ক্লিয়ারবটনমোড such এর মতো মান থাকতে পারে: কখনই না সম্পাদনা ছাড়া সম্পাদনা করুন
অ্যাপ: clearButtonDrawable
কর্মে নমুনা:
drawableEnd
আপনার মতো কেবল নিবিড় ক্রস রাখুন EditText
:
<EditText
...
android:drawableEnd="@drawable/ic_close"
android:drawablePadding="8dp"
... />
এবং ক্লিক হ্যান্ডেল করতে এক্সটেনশন ব্যবহার করুন (বা OnTouchListener
সরাসরি আপনার ব্যবহার করুন EditText
):
fun EditText.onDrawableEndClick(action: () -> Unit) {
setOnTouchListener { v, event ->
if (event.action == MotionEvent.ACTION_UP) {
v as EditText
val end = if (v.resources.configuration.layoutDirection == View.LAYOUT_DIRECTION_RTL)
v.left else v.right
if (event.rawX >= (end - v.compoundPaddingEnd)) {
action.invoke()
return@setOnTouchListener true
}
}
return@setOnTouchListener false
}
}
এক্সটেনশন ব্যবহার:
editText.onDrawableEndClick {
// TODO clear action
etSearch.setText("")
}
আপনি এই স্নিপেটটি জয়দিপ উত্তর সহ একাধিক বোতামের জন্য ব্যবহার করতে পারেন। কেবল ইটি এবং বাটন উপাদানগুলির রেফারেন্স পাওয়ার পরে এটি কল করুন। আমি ভ্যাকোটার বোতামটি ব্যবহার করেছি যাতে আপনাকে বাটন উপাদানটি ইমেজবুটনে পরিবর্তন করতে হবে:
private void setRemovableET(final EditText et, final ImageButton resetIB) {
et.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus && et.getText().toString().length() > 0)
resetIB.setVisibility(View.VISIBLE);
else
resetIB.setVisibility(View.INVISIBLE);
}
});
resetIB.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
et.setText("");
resetIB.setVisibility(View.INVISIBLE);
}
});
et.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {}
@Override
public void beforeTextChanged(CharSequence s, int start,
int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start,
int before, int count) {
if(s.length() != 0){
resetIB.setVisibility(View.VISIBLE);
}else{
resetIB.setVisibility(View.INVISIBLE);
}
}
});
}
আপনি যদি ফ্রেম বিন্যাসে থাকেন বা আপনি একটি ফ্রেম বিন্যাস তৈরি করতে পারেন আমি অন্য পদ্ধতির চেষ্টা করেছি ....
<TextView
android:id="@+id/inputSearch"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:drawableRight="@drawable/ic_actionbar"
android:layout_alignParentBottom="true"
android:layout_toRightOf="@+id/back_button"/>
<Button
android:id="@+id/clear_text_invisible_button"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_gravity="right|center_vertical"
android:background="@color/transparent"
android:layout_alignBaseline="@+id/inputSearch"
android:layout_alignBottom="@+id/inputSearch"
android:layout_alignRight="@+id/inputSearch"
android:layout_alignEnd="@+id/inputSearch"
android:layout_marginRight="13dp"
/>
এটি একটি সম্পাদনা পাঠ্য যেখানে আমি একটি সঠিক অঙ্কনযোগ্য হিসাবে ক্রস আইকন রাখি এবং এটির উপরে আমি স্বচ্ছ বোতামটি রাখি যা পাঠ্য সাফ করে।
<EditText
android:id="@+id/idSearchEditText"
android:layout_width="match_parent"
android:layout_height="@dimen/dimen_40dp"
android:drawableStart="@android:drawable/ic_menu_search"
android:drawablePadding="8dp"
android:ellipsize="start"
android:gravity="center_vertical"
android:hint="Search"
android:imeOptions="actionSearch"
android:inputType="text"
android:paddingStart="16dp"
android:paddingEnd="8dp"
/>
EditText mSearchEditText = findViewById(R.id.idSearchEditText);
mSearchEditText.addTextChangedListener(this);
mSearchEditText.setOnTouchListener(this);
@Override
public void afterTextChanged(Editable aEditable) {
int clearIcon = android.R.drawable.ic_notification_clear_all;
int searchIcon = android.R.drawable.ic_menu_search;
if (aEditable == null || TextUtils.isEmpty(aEditable.toString())) {
clearIcon = 0;
searchIcon = android.R.drawable.ic_menu_search;
} else {
clearIcon = android.R.drawable.ic_notification_clear_all;
searchIcon = 0;
}
Drawable leftDrawable = null;
if (searchIcon != 0) {
leftDrawable = getResources().getDrawable(searchIcon);
}
Drawable rightDrawable = null;
if (clearIcon != 0) {
rightDrawable = getResources().getDrawable(clearIcon);
}
mSearchEditText.setCompoundDrawablesWithIntrinsicBounds(leftDrawable, null, rightDrawable, null);
}
@Override
public boolean onTouch(View aView, MotionEvent aEvent) {
if (aEvent.getAction() == MotionEvent.ACTION_UP){
if (aEvent.getX() > ( mSearchEditText.getWidth() -
mSearchEditText.getCompoundPaddingEnd())){
mSearchEditText.setText("");
}
}
return false;
}