تابع مورد نیاز برای غیرفعال کردن یک ادیت باکس
سلام دوستان // من 4 تا ادیت باکس دارم . که باید وقتی ی دکمه ای از کیبردی ک ساختم رو فشار میدمم ، اون عدد توی اون ادیت باکسی ک می خوام نمایش داده بشه . شما می دونید باید از چه تابعی برای این کار استفااده کنم؟ یعنی بگم وقتی کاربر روی اون ادیت باکس کلیک کرد و فعال شد ، بقیه ی ادیت تکسها غیر فعال بشن و عددی ک کاربر روش کلیک می کنه توی اون ادیت باکس نمایش داده بشه؟ حالا این غیر فعال شدنو چ جوری باید بگم؟ ممنونم از راهنماییتون
سلام این یه تیکه کد رو داشته باش مال یه پروژه تبدیل واحده که از روی آموزش استاد ساختم
final EditText edtMm = (EditText) findViewById(R.id.edtMm);
final EditText edtCm = (EditText) findViewById(R.id.edtCm);
final EditText edtM = (EditText) findViewById(R.id.edtM);
final EditText edtKm = (EditText) findViewById(R.id.edtKm);
final EditText edtI = (EditText) findViewById(R.id.edtI);
final EditText edtF = (EditText) findViewById(R.id.edtF);
final EditText edtY = (EditText) findViewById(R.id.edtY);
final EditText edtMiles = (EditText) findViewById(R.id.edtMiles);
تو این پروژه از 8 تا Plain Text استفاده کردم که به شکل بالا براشون آی دی اختصاص دادم و با استفاده از کد زیر دقیقا همون کاری که می خوای رو انجام دادم روشون
edtMm.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View arg0, boolean arg1) {
edtCm.setText("");
edtM.setText("");
edtKm.setText("");
edtI.setText("");
edtF.setText("");
edtY.setText("");
edtMiles.setText("");
}
});
اگر دقت کنی به جای متد setOnClickListener از متد setOnFocusChangeListener استفاده شده
من خودم از کیبورد شخصی استفاده میکنم . شامل اعداد 0 تا 9 و یه ممیز و یه ویرگول و یه منفی و یه Backspace و علامت های چپ و راسته .
برای تک تک کلیدهای کیبورد و در خاصیت onClick ، متد doClick رو ست کن و بعد از کد زیر استفاده کن ، لازم نیست چیزی رو غیر فعال کنی چون دقیقا شبیه کیبورد خود اندروید عمل میکنه ( البته قبلش حتما تونستی کیبورد اندروید رو غیر فعال کنی ! ) .
public void doClick(View view) {
TextView textView = (TextView) view;
char chr = textView.getText().charAt(0);
final int code = chr;
final String str;
switch (code) {
case 44://comma code
str = "COMMA";
break;
case 8678://back code
str = "DEL";
break;
case 8594://right code
str = "DPAD_RIGHT";
break;
case 8592://left code
str = "DPAD_LEFT";
break;
case 46://dot code
str = "PERIOD";
break;
case 45://minus code
str = "MINUS";
break;
default:
str = Character.toString(chr);
}
new Thread(new Runnable() {
@Override
public void run() {
try {
Instrumentation inst = new Instrumentation();
inst.sendKeyDownUpSync(KeyEvent.class.getField("KEYCODE_" + str).getInt(null));
}
catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}
سلام
این خط :
char chr = textView.getText().charAt(0);
کاراکتر موجود در روی دکمه یا TextView رو میگیره و در متغیر از نوع char تبدیل میکنه .
خط بعد یعنی :
final int code = chr;
کد کاراکتر رو بدست میاره .
و در switch با توجه به کد ، یه متغیر از نوع String ساخته میشه . مثلا اگه کد ، 44 باشه ، یعنی کلید ویرگول زده شده و متغیر
str ="COMMA"
ساخته میشه .
(البته نباید متن روی دکمه ها از یک حرف بیشتر باشه . مثلا برای دکمه Del نباید بنویسی Del یا Delete یا Backspace ، بلکه باید یه کاراکتر بنویسی . مثل ⇦ که کد مربوط به این کاراکتر 8678 هست . یا برای ویرگول ، متن دکمه "," باشه نه چیز دیگه ، که کدش 44 هست )
در مورد حالت default : این برای اعداد 0 تا 9 هست . اگه کد کاراکتر کلیک شده هیچ کدام از اعداد ذکر شده نباشه یعنی کلیدهای 0 تا 9 کلیک شده ، که با استفاده از کد :
str =Character.toString(chr);
متن دکمه در str ذخیره میشه .
و در آخر تابع sendKeyDownUpSync ، با استفاده از متغیر str عمل keyPress رو برای ما شبیه سازی میکنه .
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .