آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

تابع مورد نیاز برای غیرفعال کردن یک ادیت باکس

Atieh  9 سال پیش  9 سال پیش
+1 0

سلام دوستان // من 4 تا ادیت باکس دارم . که باید وقتی ی دکمه ای از کیبردی ک ساختم رو فشار میدمم ، اون عدد توی اون ادیت باکسی ک می خوام نمایش داده بشه . شما می دونید باید از چه تابعی برای این کار استفااده کنم؟ یعنی بگم وقتی کاربر روی اون ادیت باکس کلیک کرد و فعال شد ، بقیه ی ادیت تکسها غیر فعال بشن و عددی ک کاربر روش کلیک می کنه توی اون ادیت باکس نمایش داده بشه؟ حالا این غیر فعال شدنو چ جوری باید بگم؟ ممنونم از راهنماییتون

0 0
سلام ، منظورتون چیه ؟ شما وقتی یک EditText رو فعال میکنید بقیه خود به خود غیر فعال میشن دیگه ، و اگه از کیبورد کلیدی فشار دهید ، توی همون آخرین EditText ای که کلیک کردید نشون داده میشه . (9 سال پیش)
0 0
از کیبرد گوشی کاری ک میگین شدنیه . یعنی وقتی میرم روی ی ادیت تکست دیگ میتونم عدد وارد کنم . از if استفاده کردم و گفتم اگ مثلا روی یکی از ادیت تکستها تاچ شد بقیه setEnableشون (اگ اشتباه نکرده باشم ) ، false بشه . اما این کار باعث میشه وقتی دارم رویی ادیت باکس می نویسم دقیقا توی بقیشم همون عددا وارد بشه ک این غلطه (9 سال پیش)
 برای این سوال 3 پاسخ وجود دارد.
پاسخ به سوال 
یاسین موسوی اول  9 سال پیش
+1 0

سلام این یه تیکه کد رو داشته باش مال یه پروژه تبدیل واحده که از روی آموزش استاد ساختم

        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 استفاده شده

+1 0
البته حواست باشه که باید برای هر Plain Text یه دونه از این متد ها فراخوانی بشه که من برای طولانی نشدن بیش از حد جواب فقط یه موردش رو گذاشتم (9 سال پیش)
0 0
نه فکر کنم منطورم. متوجه نشدین .منظورم اینه ک وقتی من عدد 34 رو وارد یکی از ادیت تکسها می کنم ، و بعد ادیت تکس دیگ رو روش تاچ می کنمو عدد 6 رو وارد می کنم ، این عدد 6 دووباره توی ادیت باکس قبلی تایپ نشه . مثلا فرض کنید شما قراره دوتا نقطه بدین ب برنامه . ی x1 و y1 و ی x2و y2 . خب ما 4 تا ادیت تکست داریم . کاربر میاد رو ادیت تکستی ک مربوط ب x1 هست کلیک میکنه و عدد مورد نطرشو از صفحه کلیدی ک توی برنامه هست ، وارد میکنه . بعد دوباره روی ادیت تکست بعدی ک مربوط به y1 هست کلیک می کنه تا اونم وارد کنه . من می خوام با صفحه کلیدی ک ساختم این کار انجام بشه . وگرنه با کیبرد گوشی شدنیه . تابعی ک شما فرمودید و چیزی ک نوشتین فکر کنم مال زمانیه ک وقتی روی ی ادیت تکست تاچ شد ، بقیه اش پاک بشه ک من نمی خوام پاک بشه . میخوام ثابت نگهشون دارم و برم روی ادیت تکست بعدی ببخشید یکم طولانی شد (9 سال پیش)
+1 0
اگر برای هر ادیت تکست یه آی دی مخصوص بنویسی بعد میتونی بگی که عدد هایی که در حال حاضر داری تایپ می کنی توی ادیت تکست اول با آی دی مثلا edt1 نوشته بشه و برای این کار هم میشه یه فیلد تعریف کرد که مقادیر متفاوتی به خودش میگیره و برای هر حالتش فقط یکی از ادیت تکست ها قابل نوشتن باشه که این جا چون گفتی 4 تا ادیت تکست داری پس فیلد boolean به درد نمیخوره و میتونی از فیلد int استفاده کنی و 4 تا مقدار مجزا بهش اختصاص بدی که هر کدوم متناظر با یک ادیت تکست هست (9 سال پیش)
+1 0
منظورم از 4 مقدار مجزا اینه که مثلا مقدار اولیه 0 بهش بده بعد بگو اگر مقدار فیلد 0 بود ادیت تکست اول ویرایش بشه بعد قبل از اتمام حلقه شرط مقدار فیلد رو تغییر بدی که دفعه بعدی که عدد وارد میکنی توی یه ادیت تکست دیگه وارد بشه (9 سال پیش)
0 0
ممنونم ازتون . من مشکلم اصلا همین جمله ی شماست :هر حالتش فقط یکی از ادیت تکست ها قابل نوشتن باشه .میگم چجوری میشه گفت ک در هر حالت فقط یک ادیت تکست فعال بشه؟؟؟ طبق این جمله تون :بعد قبل از اتمام حلقه شرط مقدار فیلد رو تغییر بدی که دفعه بعدی که عدد وارد میکنی توی یه ادیت تکست دیگه وارد بشه .... باید بگم که شاید کاربر بخواد خودش این تغییرو انجام بده نه برنامه ب صورت اتوماتیک . میشه گفت فیلدی ک قراره تغییر کنه طبق چیزی باشه ک کاربر وارد میکنه . ولی ما از کجا بدونیم کاربر کدومو انتخاب میکنه؟؟ (9 سال پیش)
پاسخ به سوال 
Reza  9 سال پیش
+1 0

    من خودم از کیبورد شخصی استفاده میکنم . شامل اعداد 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();

}
0 0
حتی اگه خواستی مثل کیبورد کامپیوتر ، که وقتی روی کلید ، longClick میکنی با یه سرعت ثابت حرف مورد نظر رو تایپ کنه بگو کدشو بدم ( کاربردی نداره و فقط جذابیت داره و طبیعی تر به نظر میرسه ) . (9 سال پیش)
0 0
ممنونم لینک میشه درمورد کدتون ی توضیحی بدید؟ من کیبردی ک دارم اعداد 0 تا 9هست + ی دیلیت و ی دات / وقتی میزنم روی 1 این عدد خونده میشه و روی ادیت تکست نوشته میشه . اینی ک شما نوشتین کجاشه دقیقا؟یعنی فرمان گرفتن عدد از روی دکمه ی فشار داده شده کجاست؟ شایدم منظورتون اینه ک وقتی مثلا روی 1 کلیک شد کد مربوط به عدد 1 در کیبرد توی ادیت تکست نوشته بشه؟ (9 سال پیش)
0 0
یعنی شما در کیس هی متفاوت اومدین کدهای مربوط ب کلید های ص کلید رو نوشتین درسته؟ و این دقیقا شبیه کیبرد کامپیوتر یا امولیتور اندرویید کار میکنه !!! استاد توی آموزش ماشین حساب ی کیبرد معمولی زدند . من داشتم شبیه ب اون عمل می کردم . با این تفاوت ک ب جای تکس ویو در ادیت تکست دارم مینویسم و به جای یکی از 4 تا . بعدش مشکلم در ست شدن این اعداد با تاچ کردن ادیت تکست ها بود . الان کدتونو تست می کنم . ممنونم ازتون (9 سال پیش)
پاسخ به سوال 
Reza  9 سال پیش
+1 0

سلام

این خط :

 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 رو برای ما شبیه سازی میکنه .

 
+1 0
خیلی خیلی ممنونم از لطفتون خیلی مرسی...موفق باشید (9 سال پیش)
0 0
(9 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .