অ্যান্ড্রয়েড এডিটেক্সট-এ, বড় হাতের অক্ষর লেখার জন্য কীভাবে বাধ্য?


144

আমার অ্যান্ড্রয়েড অ্যাপ্লিকেশনটিতে আমার আলাদা রয়েছে EditTextযেখানে ব্যবহারকারী তথ্য প্রবেশ করতে পারেন। তবে ব্যবহারকারীকে বড় হাতের অক্ষরে লিখতে বাধ্য করতে হবে। আপনি এটি করতে একটি ফাংশন জানেন?

উত্তর:


340

অ্যান্ড্রয়েড আসলে এই জন্য একটি অন্তর্নির্মিত ইনপুট ফিল্টার আছে !

edittext.setFilters(new InputFilter[] {new InputFilter.AllCaps()});

সাবধান, setFilters অন্য সব বৈশিষ্ট্যাবলী পুনরায় সেট করবে যা এক্সএমএল মাধ্যমে সেট হয়েছিল (অর্থাত maxLines, inputType, imeOptinos...)। এটি প্রতিরোধ করতে, ইতিমধ্যে বিদ্যমানগুলিতে আপনাকে ফিল্টার (গুলি) যুক্ত করুন।

InputFilter[] editFilters = <EditText>.getFilters();
InputFilter[] newFilters = new InputFilter[editFilters.length + 1];
System.arraycopy(editFilters, 0, newFilters, 0, editFilters.length);
newFilters[editFilters.length] = <YOUR_FILTER>;  
<EditText>.setFilters(newFilters);

3
হ্যাঁ! এটাই সেরা উত্তর! কোডটি edittext.setFilters(new InputFilter[] {new InputFilter.AllCaps()});যদিও হওয়া উচিত ।
আর্থার

4
ঠিক আছে আপনি লোকেরা ঠিক বলেছেন, আমি আমার উত্তর আপডেট করেছি। এই উন্নতিতে সাহায্য করার জন্য ধন্যবাদ !!
আর্লভোল্টন

4
আপনি যে ফিল্টারগুলি XML সেট অগ্রাহ্য এড়াতে (যেমন জন্য। maxLength), যোগ করার চেষ্টা InputFilter.AllCaps()করতে editText.getFiltersঅ্যারে। স্ট্যাকওভারফ্লো.com
গ্রীষ্মমণ্ডলীয়

21
বা editText.filters = editText.filters + InputFilter.AllCaps()
কোটলিনে

4
আরও ভাল: editText.filters += InputFilter.AllCaps()কোটলিনের দুর্দান্ত! <3
মিলাক 27

123

আপনি যদি নিজের সম্পাদনা পাঠ্যে ডিফল্টরূপে বড় হাতের অক্ষরে লিখতে ব্যবহারকারীকে বাধ্য করতে চান তবে আপনাকে কেবল যুক্ত করতে হবে । (ব্যবহারকারী এখনও ম্যানুয়ালি ছোট হাতের অক্ষরে পরিবর্তন করতে পারেন))android:inputType="textCapCharacters"


39
কিছুই 'চাপ' চেপে ব্যবহারকারীকে বাধা দেয় এবং একটি চিঠি ছোট করে লিখুন।
ফার্নান্দো লিয়াল

ফার্নান্দোর সাথে সম্মত হন, যখন এটি ক্যাপগুলিতে কীবোর্ডটি ডিফল্ট করে, তবুও তাদের প্রয়োজন হয় না।
pforhan

ব্যবহারকারী হিসাবেও @Fernando বলেছেন ছোট হাতের অক্ষর প্রবেশ করতে শিফট বাটন ব্যবহার করতে পারেন
আজিঙ্কা


18

আপনি দুটি উপায় ব্যবহার করতে পারেন।

প্রথম উপায়:

android:inputType="textCapSentences"আপনার সম্পাদনা পাঠ্য সেট করুন।

দ্বিতীয় উপায়:

যখন ব্যবহারকারী নম্বরটি প্রবেশ করেন তখন আপনাকে পাঠ্য প্রহরী ব্যবহার করতে হবে এবং ছোট থেকে বড় অক্ষরে পরিবর্তন করতে হবে।

edittext.addTextChangedListener(new TextWatcher() {

    @Override
    public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {            

    }
        @Override
    public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
                    int arg3) {             
    }
    @Override
    public void afterTextChanged(Editable et) {
          String s=et.toString();
      if(!s.equals(s.toUpperCase()))
      {
         s=s.toUpperCase();
         edittext.setText(s);
         edittext.setSelection(edittext.length()); //fix reverse texting
      }
    }
});  

2
আপনার সমাধান কাজ করে না কারণ এটি বিপরীত ক্রমে স্ট্রিং সেট করে।
co2f2e

আপনি প্রথম বা দ্বিতীয় কোন উপায়ে ব্যবহার করেছেন।
হার্শিদ

প্রথম এক কিছু কাজ করছে না। দ্বিতীয়টি পাঠ্যটিকে আপার কেস করে তোলে তবে আমাদের অবশ্যই প্রোগ্রামেটিকভাবে বাক্যটির শেষে কার্সারটি সেট করতে হবে।
co2f2e

@ কালানামিথ হ্যাঁ তবে সমস্যা কী
হর্ষিদ

6
প্রথম বিকল্পের জন্য পাঠ্যক্যাপসেন্টেন্স বাক্যকে বড় করে তোলে, আপনার পাঠ্যক্যাপচার্যাক্টর দরকার।
ঘোটি

13

আপনি android:textAllCaps="true"এডিট টেক্সটে আপনার এক্সএমএল ফাইলটিতে সম্পত্তি যুক্ত করতে পারেন । এটি সমস্ত ক্যাপ মোডে প্রদর্শিত সফ্টিনপুট কীবোর্ডকে কার্যকর করবে। আপনি যে মানটি প্রবেশ করেছেন তা বড় হাতের অক্ষরে উপস্থিত হবে। তবে এটি নিশ্চিত করে না যে ব্যবহারকারী কেবলমাত্র UpperCaseঅক্ষরে প্রবেশ করতে পারে । তারা চাইলে, তারা এখনও নিম্ন কেস অক্ষরে ফিরে যেতে পারে। আপনি যদি নিশ্চিত করতে চান যে আউটপুটটি Edittextসমস্ত ক্যাপগুলিতে রয়েছে তবে ক্লাসের toUpperCase()পদ্ধতি ব্যবহার করে আপনাকে ম্যানুয়ালি ইনপুট স্ট্রিংটি রূপান্তর করতে হবে String


@ গুস্তাভোআলভস, আপনি কি কেবল আমাকে বলতে পারেন আপনি যখন এই চেষ্টা করেছিলেন তখন কি ঘটেছিল? আমি আপনার সমস্যাটি দেখতে পারি :)
অভিষেক

হাই @ অভিষেক সম্পত্তি সেট করা কোনও পরিবর্তন করেনি। এডিটেক্সট এখনও বড় হাতের এবং ছোট হাতের অক্ষর উভয়ই গ্রহণ করে।
গাস কোস্তা

1
হ্যাঁ আপনি যদি আপনার সম্পাদনা পাঠ্যকে কেবল বড় হাতের অক্ষর গ্রহণ করতে সীমাবদ্ধ রাখতে চান তবে আপনার জন্য অ্যান্ড্রয়েড: ইনপুট টাইপ = "টেক্সটক্যাপচার্যাক্টরস" সঠিক বিকল্প হবে। একবার চেষ্টা করে দেখুন এবং তারপর আমাকে জানান। ☺️
অভিষেক

1
এটি প্রতিটি টাইপ করার সময় সীমা ব্যতিক্রমের কারণে সূচক তৈরি করে।
Zapnologica

2
android:textAllCaps="true"এটি কেবলমাত্র টেক্সটভিউয়ের সম্পত্তি ( স্ট্যাকওভারফ্লো . com /a/28803492/ 5268730 )। android:inputType="textCapCharacters"পরিবর্তে ব্যবহার করুন।
কাঠিয়াই

11

আপনার android:inputType="textCapCharacters"xML ফাইল এডিটেক্সট দিয়ে রাখা উচিত ।


9
অওয়ামনামি ঠিক একই উত্তর লিখেছিলেন। দয়া করে আরও বর্তমান প্রশ্নগুলিতে মনোনিবেশ করুন, এটি ২০১৩ সালের। :)
বাইটহ্যামস্টার

2
লক্ষ্য করুন যে ব্যবহারকারী স্থান পরিবর্তন করতে এবং নিম্ন অক্ষরগুলি প্রবেশ করতে পারে
রাফা0809

10

কীবোর্ডের সাথে ডিল করার বিষয়ে চিন্তা করার পরিবর্তে, কেবল কোনও ইনপুট, ছোট হাতের বা বড় হাতের না কেন এবং স্ট্রিংটিকে বড় হাতের মধ্যে রূপান্তর করবেন না কেন?

নিম্নলিখিত কোডে সহায়তা করা উচিত:

EditText edit = (EditText)findViewById(R.id.myEditText);
String input;
....
input = edit.getText();
input = input.toUpperCase(); //converts the string to uppercase

এটি ব্যবহারকারী-বান্ধব, যেহেতু ব্যবহারকারীর পক্ষে এটি জেনে রাখা অপ্রয়োজনীয় যে আপনার বড় হাতের স্ট্রিং দরকার। আশাকরি এটা সাহায্য করবে.


9

আরও ভাল করে ... এক মাছ ধরার নৌকা মধ্যে Kotlin ...

// gets your previous attributes in XML, plus adds AllCaps filter    
<your_edit_text>.setFilters(<your_edit_text>.getFilters() + InputFilter.AllCaps())

সম্পন্ন!


2
আপনি সম্পত্তি অ্যাক্সেস সিনট্যাক্স ব্যবহার করে এটি লিখতে পারেন: <your_edit_text>.filters = <your_edit_text>.filters + InputFilter.AllCaps()
মাকোটোসান

8
আরও ভাল:<your_edit_text>.filters += InputFilter.AllCaps()
মাকোটোসান

9

ইন kotlin , .kt ফাইল বানান পরিবর্তন:

edit_text.filters = edit_text.filters + InputFilter.AllCaps()

আইডি সহ উইজেটের সরাসরি অ্যাক্সেসের জন্য সিন্থেটিক সম্পত্তি ব্যবহার করুন। এবং এক্সএমএলে, আপনার সম্পাদনা পাঠ্যের জন্য আরও কয়েকটি পতাকা যুক্ত করুন:

<EditText
    android:id="@+id/edit_text_qr_code"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    ...other attributes...
    android:textAllCaps="true"
    android:inputType="textCapCharacters"
    />

এটি কীবোর্ডকে উপরের কেস সক্ষম হিসাবে আপডেট করবে।



6
edittext.addTextChangedListener(new TextWatcher() {

    @Override
    public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {            

    }
        @Override
    public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
                    int arg3) {             
    }
    @Override
    public void afterTextChanged(Editable et) {
          String s=et.toString();
      if(!s.equals(s.toUpperCase()))
      {
         s=s.toUpperCase();
         edittext.setText(s);
      }
      editText.setSelection(editText.getText().length());
    }
});  

6

শুধু এটি করুন:

// ****** Every first letter capital in word *********
<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:inputType="textCapWords"
    />

//***** if all letters are capital ************

    android:inputType="textCapCharacters"

5

নীচের কোডগুলির মধ্যে যে কোনও একটিটি ব্যবহার করার চেষ্টা করুন আপনার সমস্যাটি সমাধান করতে পারে।

programatically:

editText.filters = editText.filters + InputFilter.AllCaps()

এক্সএমএল:

android:inputType="textCapCharacters" with Edittext

4

আমার জন্য এটি অ্যান্ড্রয়েড যুক্ত করে কাজ করেছে : টেক্সটআলক্যাপস = "সত্য" এবং অ্যান্ড্রয়েড: ইনপুটটাইপ = "টেক্সটক্যাপচার্যাক্টরস"

<android.support.design.widget.TextInputEditText
                    android:layout_width="fill_parent"
                    android:layout_height="@dimen/edit_text_height"
                    android:textAllCaps="true"
                    android:inputType="textCapCharacters"
                    />

3

সমস্ত মূলধন পেতে, আপনার এক্সএমএলে নিম্নলিখিতটি ব্যবহার করুন:

<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textAllCaps="true"
    android:inputType="textCapCharacters"
/>

2
আপনি কি এই সমাধান চেষ্টা করেছেন? ব্যবহারকারী এডিটেক্সট এর বিষয়বস্তু সম্পাদনা করতে শুরু করার সাথে সাথে অ্যাপ্লিকেশন ক্রাশের ফলাফল
সুরহীদমত্যা

3

এই কোডটি ব্যবহার করে দেখুন এটি আপনার ইনপুটটিকে আপার ক্ষেত্রে তৈরি করবে

edittext.setFilters(new InputFilter[] {new InputFilter.AllCaps()});

2

গৃহীত উত্তরের ভিত্তিতে, এই উত্তরটি একই কাজ করে তবে কোটলিনে। কেবল কপিপাস্টিং সহজ করতে: ·)

private fun EditText.autocapitalize() {
    val allCapsFilter = InputFilter.AllCaps()
    setFilters(getFilters() + allCapsFilter)
}

1
filters += InputFilter.AllCaps(): ডি
ক্রগারিডোস

1

এডিটেক্সট ক্লিক করে আপনার এক্সএমএলে এই কোডটি ব্যবহার করুন যখন মূলধন কীবোর্ড পেতে ,

<EditText
    android:id="@+id/et"
    android:layout_width="250dp"
    android:layout_height="wrap_content"
    android:hint="Input your country"
    android:padding="10dp"
    android:inputType="textCapCharacters"
    />

1

আমি অ্যান্ড্রয়েড 5.1 এবং অ্যান্ড্রয়েড 6.0 উভয়ের জন্যই আমার অ্যাপটি তৈরি করতে ভিজুয়াল স্টুডিও 2015 / জ্যামারিন ব্যবহার করছি both

আমি যখন android:inputType="textCapCharacters"আমার অ্যাক্সিম্যালটিতে উল্লেখ করেছি তখন অলক্যাপস কীবোর্ডটি অ্যান্ড্রয়েড .0.০ তে প্রত্যাশিত হিসাবে উপস্থিত হয়েছিল, তবে অ্যান্ড্রয়েড 5.1 নয়। আমি android:textAllCaps="true"আমার axML এ যুক্ত করেছি এবং অ্যান্ড্রয়েড 5.1 এ এখনও অলক্যাপগুলি নেই। আমি ব্যবহার করে একটি ফিল্টার সেট করেছি EditText.SetFilters(new IInputFilter[] { new InputFilterAllCaps() });এবং সফ্ট কীবোর্ড অ্যান্ড্রয়েড 5.1 এ লোয়ার কেস অক্ষর দেখায়, ইনপুট ফিল্ডটি এখন অলক্যাপস।

সম্পাদনা: আমি যে আচরণগত পার্থক্যগুলি পর্যবেক্ষণ করেছি এবং ওএস-সম্পর্কিত বলে ধরে নিয়েছি তা হ'ল পরীক্ষামূলক ডিভাইসে আমার গুগল কীবোর্ডের বিভিন্ন সংস্করণ ছিল। একবার আমি সর্বশেষতম গুগল কীবোর্ডে ডিভাইসগুলি আপডেট করেছি (এই লিখনটি হিসাবে জুলাই ২০১ released প্রকাশিত হয়েছে), 'সমস্ত ক্যাপস' আচরণটি ওএসের সাথে সামঞ্জস্যপূর্ণ ছিল। এখন, সমস্ত ডিভাইস কীবোর্ডে লোয়ার-কেস অক্ষরগুলি দেখায় তবে ইনপুটটি সমস্ত ক্যাপস কারণে হয়SetFilters(new IInputFilter[] { new InputFilterAllCaps() });


1
হাই টনি, মনে হচ্ছে আপনি 2 অ্যাকাউন্ট তৈরি করেছেন; stackoverflow.com/users/6764633/tony-celia এবং stackoverflow.com/users/6771440/deeveedee । আপনি যদি সেগুলিকে একত্রীকরণ করতে চান তবে stackoverflow.com/help/merging- অ্যাকাউন্ট দেখুন
ম্যাট

ধন্যবাদ, ম্যাট এটিকে এক নতুন শিক্ষার / ভুলগুলি পর্যন্ত চালাও। আপনি এটি নির্দেশ না করা পর্যন্ত আমি অন্য অ্যাকাউন্ট তৈরি করেছিলাম তা মনে নেই। ভাগ্যক্রমে, অ্যাকাউন্ট মার্জ ফাংশনটি সহজ ছিল। দুর্দান্ত ফোরাম!
টনি

1

এরলভল্টনের জবাবের সমতুল্য জামারিন:

editText.SetFilters(editText.GetFilters().Append(new InputFilterAllCaps()).ToArray());

এই কারণেই আমি পছন্দ করি কিভাবে সি # এত সংক্ষিপ্ত হতে পারে।
লিওনেট চেন

1

সাধারণ কোটলিন উপলব্ধি

fun EditText.onlyUppercase() {
    inputType = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS
    filters = arrayOf(InputFilter.AllCaps())
}

আমার জন্য পিএস filtersসর্বদা প্রাথমিকভাবে খালি থাকে


0

প্রস্তাবিত সমাধানটির একটি জাভা 1-লাইনার হতে পারে:

editText.setFilters(Lists.asList(new InputFilter.AllCaps(), editText.getFilters())
    .toArray(new InputFilter[editText.getFilters().length + 1]));

এটি প্রয়োজন নোট করুন com.google.common.collect.Lists


-1

সহজভাবে, আপনার এক্সএমএল ফাইলের সম্পাদনা পাঠের নীচে কোড যুক্ত করুন।

android:digits="ABCDEFGHIJKLMNOPQRSTUVWXYZ"

এবং আপনি যদি বড় হাতের পাঠ্য এবং অঙ্ক উভয়কেই অনুমতি দিতে চান তবে নীচের কোডটি ব্যবহার করুন।

android:digits="ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"

2
এটি নিশ্চিতভাবে কাজ করে তবে এটি খুব ভাল ব্যবহারকারীর অভিজ্ঞতা নয়। আমি কেবল এটি চেষ্টা করে দেখেছি এবং কীবোর্ডটি স্ব-ক্যাপিটালাইজ না হওয়ায় (কমপক্ষে এন তে), ছোট হাতের অক্ষরগুলি কেবল ব্যবহারকারীর কাছে কোনও প্রতিক্রিয়া ছাড়াই উপেক্ষা করা হয়, যার ফলে ইউআই ভাঙ্গা মনে হচ্ছে।
ম্যাটম্যাট

@ ম্যাটম্যাট এর সাথে সম্পূর্ণ সম্মত আমরা যদি এটি করি তবে ব্যবহারকারী ছোট ছোট অক্ষর টাইপ করতে পারবে না। ব্যবহারকারীর যেকোন মামলা টাইপ করতে সক্ষম হওয়া উচিত এবং বাকী দুটি শব্দকে বড় হাতের অক্ষরে লেখা উচিত
মির আদনান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.