فرض بر این است که متنی داخل EditText وجود دارد و قسمتی از آن توسط کاربر به حالت انتخاب در میآید، حالا هدف این است که این قسمت انتخاب شده را به دست آورده و روی آن عملیات دلخواهمان را انجام دهیم.
با دو متد getSelectionStart و getSelectionEnd، قبلا در «این آموزش» آشنا شدیم و گفتیم که میتوانید از این دو متد برای گرفتن موقعیت فعلی مکاننما استفاده کنید؛ اما توجه داشته باشید ممکن است بعضی اوقات مکاننما، هیچ موقعیتی در داخل EditText نداشته باشد؛ مثل زمانی که کاربر، بخشی از متن داخل EditText را انتخاب کرده است. این موضوع، باعث وجود نداشتن هیچ مکان نمایی خواهد شد. حالا با دو چالش رو به رو هستیم.
- فهمیدن این که آیا بخشی از متن انتخاب شده (مکان نمایی وجود ندارد)
- گرفتن متن انتخاب شده
در مورد چالش اول:
متد getSelectionStart همانطور که از نامش پیداست، تقطه شروع بخش انتخاب شده را برمیگرداند؛ و متد getSelectionEnd() نیز نقطه پایانی آن را. پس زمانی که هیچ متنی انتخاب نشده باشد، این دو مقدار باهم برابر خواهند بود؛ یعنی مقدار getSelectionStart() با مقدار getSelectionEnd() برابر است و با بررسی آن دو میتوانیم این موضوع را تشخیص دهیم که آیا متنی انتخاب شده است یا خیر.
در مورد چالش دوم:
برای انجام این کار، علاوه بر اطلاعاتی که دو متد getSelectionStart() و getSelectionEnd() در اختیارمان قرار میدهند، به متد دیگری احتیاج داریم تا بتوانیم آن قسمت از متن را به دست آوریم. از آنجایی که نقطه شروع و نقطه پایان را در اختیار داریم، متد subString مناسب است؛ و این متد، از یک نقطه شروع کرده و تا یک نقطه متن را به ما تحویل میدهد. به صورت زیر:
EditText et = (EditText)findViewById(R.id.edit); String selectedText = et.getText().toString().substring(et.getSelectionStart(), et.getSelectionEnd());
نظرات ثبت شده بدون دیدگاه