android - অ্যানড্রয়েড-একটি সম্পাদনা পাঠ্যতে "প্রবেশ করান" পরিচালনা করুন




android-edittext android-textview (17)

এন্টারপ্রাইজ টাইপ করার সময় Enter চাপার সময় ব্যবহারকারীকে হ্যান্ডেল করার উপায় আছে কিনা আমি অবাক হয়ে আছি, কিছু অনুলিপি HTML ইভেন্টের মত।

এছাড়াও "সম্পন্ন" বোতামটি অন্য কিছু লেবেলযুক্ত (যেমন "যান") লেবেলযুক্ত এমন ভার্চুয়াল কীবোর্ডটি ম্যানিপুলেট করার উপায় আছে কিনা তা নিয়ে অবাক হওয়ার কিছু আছে এবং (আবার, জমা দেওয়ার মতো) ক্লিক করার সময় একটি নির্দিষ্ট পদক্ষেপ সম্পাদন করে।


Answers

আপনার xml এ, editText এ imeOptions বৈশিষ্ট্য যোগ করুন

<EditText
    android:id="@+id/edittext_additem"
    ...
    android:imeOptions="actionDone"
    />

তারপরে, আপনার জাভা কোডে, একই সম্পাদনাটেক্সটে অনঅডিটর অ্যাকশনলিস্টার যুক্ত করুন

mAddItemEditText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
            if(actionId == EditorInfo.IME_ACTION_DONE){
                //do stuff
                return true;
            }
            return false;
        }
    });

এখানে ব্যাখ্যা আছে- IMEOptions = actionDone EnterKey এ "actionDone" বরাদ্দ করবে। কীবোর্ডে EnterKey "Enter" থেকে "Done" এ পরিবর্তিত হবে। সুতরাং যখন Enter কী টিপে চাপ দেওয়া হয়, তখন এটি এই পদক্ষেপটি ট্রিগার করবে এবং এভাবে আপনি এটি পরিচালনা করবেন।


এই কাজ করা উচিত

input.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( -1 != input.getText().toString().indexOf( "\n" ) ){
                   input.setText("Enter was pressed!");
                    }
           }
          });

আমি এটি একটি বছর বয়সী জানি, কিন্তু আমি শুধু এই EditableText জন্য এই কাজ পুরোপুরি আবিষ্কৃত।

EditText textin = (EditText) findViewById(R.id.editText1);
textin.setInputType(InputType.TYPE_CLASS_TEXT);

এটা টেক্সট এবং স্থান ছাড়া অন্য কিছু বাধা দেয়। আমি ট্যাব, "ফেরত" ("\ n"), বা কিছু করতে পারে না।


এই এলজি অ্যান্ড্রয়েড ফোন জরিমানা কাজ করে। এটি ENTER এবং অন্যান্য বিশেষ অক্ষরগুলিকে স্বাভাবিক চরিত্র হিসাবে ব্যাখ্যা করা প্রতিরোধ করে। Next বা Done বোতাম স্বয়ংক্রিয়ভাবে প্রদর্শিত হয় এবং প্রত্যাশিত হিসাবে ENTER কাজ করে।

edit.setInputType(InputType.TYPE_CLASS_TEXT);

প্রথমত, আপনাকে কী চাপতে EditText শুনতে হবে

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main); 

    // Set the EditText listens to key press
    EditText edittextproductnumber = (EditText) findViewById(R.id.editTextproductnumber);
    edittextproductnumber.setOnKeyListener(this);

}

দ্বিতীয়ত, কী প্রেসে ইভেন্টটি সংজ্ঞায়িত করুন, উদাহরণস্বরূপ, ইভেন্টটি পাঠ্য ভিউয়ের পাঠ্য সেট করতে:

@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
    // TODO Auto-generated method stub

 // Listen to "Enter" key press
 if ((event.getAction() == KeyEvent.ACTION_DOWN) && (keyCode == KeyEvent.KEYCODE_ENTER))
 {
     TextView textviewmessage = (TextView) findViewById(R.id.textViewmessage);
     textviewmessage.setText("You hit 'Enter' key");
     return true;
 }

return false;   

}

এবং অবশেষে, এডিটটেক্সট, টেক্সট ভিউ, অনকিলিস্টেনার, কীভেন্ট শীর্ষে আমদানি করতে ভুলবেন না:

import android.view.KeyEvent;
import android.view.View.OnKeyListener;
import android.widget.EditText;
import android.widget.TextView;

এখানে একটি সাধারণ স্ট্যাটিক ফাংশন যা আপনি আপনার Utils বা Keyboards ক্লাসে নিক্ষেপ করতে পারেন যা ব্যবহারকারী হার্ডওয়্যার বা সফটওয়্যার কীবোর্ডে রিটার্ন কীটি হিট করলে কোডটি কার্যকর করবে। এটি @ এরিলাস্পারের চমৎকার উত্তরের একটি সংশোধিত সংস্করণ

 /**
 * Return a TextView.OnEditorActionListener that will execute code when an enter is pressed on
 * the keyboard.<br>
 * <code>
 *     myTextView.setOnEditorActionListener(Keyboards.onEnterEditorActionListener(new Runnable()->{
 *         Toast.makeText(context,"Enter Pressed",Toast.LENGTH_SHORT).show();
 *     }));
 * </code>
 * @param doOnEnter A Runnable for what to do when the user hits enter
 * @return the TextView.OnEditorActionListener
 */
public static TextView.OnEditorActionListener onEnterEditorActionListener(final Runnable doOnEnter){
    return (__, actionId, event) -> {
        if (event==null) {
            if (actionId == EditorInfo.IME_ACTION_DONE) {
                // Capture soft enters in a singleLine EditText that is the last EditText.
                doOnEnter.run();
                return true;
            } else if (actionId==EditorInfo.IME_ACTION_NEXT) {
                // Capture soft enters in other singleLine EditTexts
                doOnEnter.run();
                return true;
            } else {
                return false;  // Let system handle all other null KeyEvents
            }
        } else if (actionId==EditorInfo.IME_NULL) {
            // Capture most soft enters in multi-line EditTexts and all hard enters.
            // They supply a zero actionId and a valid KeyEvent rather than
            // a non-zero actionId and a null event like the previous cases.
            if (event.getAction()==KeyEvent.ACTION_DOWN) {
                // We capture the event when key is first pressed.
                return true;
            } else {
                doOnEnter.run();
                return true;   // We consume the event when the key is released.
            }
        } else {
            // We let the system handle it when the listener
            // is triggered by something that wasn't an enter.
            return false;
        }
    };
}

এই depencendy যোগ করুন, এবং এটি কাজ করা উচিত:

import android.view.KeyEvent;
import android.view.View;
import android.widget.EditText;

CommonsWare যা বলেছে তার জন্য পাঠ্যক্ষেত্রের ইনপুট টাইপটি অবশ্যই text হতে হবে। শুধু এই সব চেষ্টা, বিচারের আগে কোন ইনপুট টাইপ এবং কিছুই কাজ, নরম প্রবেশ হিসাবে নিবন্ধন রাখা লিখুন। inputType = text পরে, inputType = text সহ সবকিছুই কাজ করেছে।

উদাহরণ: android:inputType="text"


     password.setOnEditorActionListener(new TextView.OnEditorActionListener() {
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
            if(event != null && event.getKeyCode() == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_DOWN) {
                InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, 0);
                submit.performClick();
                return true;
            }
            return false;
        }
    });

আমার জন্য খুব সূক্ষ্ম কাজ করে
উপরন্তু কীবোর্ড লুকান


আপনি এটা করতে পারেন ..

editText.setOnKeyListener(new OnKeyListener() {

            @Override
            public boolean onKey(View v, int keyCode, KeyEvent event)
            {
                if (event.getAction() == KeyEvent.ACTION_DOWN
                        && event.getKeyCode() ==       KeyEvent.KEYCODE_ENTER) 
                {
                    Log.i("event", "captured");

                    return false;
                } 

            return false;
        }
    });

এন্টারপ্রাইজ টাইপ করার সময় Enter চাপার সময় ব্যবহারকারীকে হ্যান্ডেল করার উপায় আছে কিনা আমি অবাক হয়ে আছি, কিছু অনুলিপি HTML ইভেন্টের মত।

হ্যাঁ।

এছাড়াও "সম্পন্ন" বোতামটি অন্য কিছু লেবেলযুক্ত (যেমন "যান") লেবেলযুক্ত এমন ভার্চুয়াল কীবোর্ডটি ম্যানিপুলেট করার উপায় আছে কিনা তা নিয়ে অবাক হওয়ার কিছু আছে এবং (আবার, জমা দেওয়ার মতো) ক্লিক করার সময় একটি নির্দিষ্ট পদক্ষেপ সম্পাদন করে।

এছাড়াও হ্যাঁ।

আপনি android:imeActionId দেখতে চাইবেন android:imeActionId এবং android:imeOptions গুণাবলী, plus setOnEditorActionListener() পদ্ধতি, সমস্ত setOnEditorActionListener()

একটি কাস্টম স্ট্রিংয়ের "সম্পন্ন" বোতামের পাঠ্য পরিবর্তন করার জন্য, ব্যবহার করুন:

mEditText.setImeActionLabel("Custom text", KeyEvent.KEYCODE_ENTER);

আমি একটি অনুরূপ উদ্দেশ্য ছিল। আমি পাঠ্য ভিউ প্রসারিত একটি অটোকম্প্লটেটেক্স ভিউতে কীবোর্ডে (যেটি আমি কাস্টমাইজ করতে চেয়েছি) তে "এন্টার" কী চাপার সমাধান করতে চেয়েছি। আমি উপরে থেকে বিভিন্ন সমাধান চেষ্টা করে এবং তারা কাজ করলো। কিন্তু আমি যখন আমার ডিভাইসের ইনপুট টাইপটি সুইচকি 3 (যেখানে এটি পুরোপুরি কাজ করে) থেকে আমার ডিভাইসে ইনপুট প্রকারটি (এনওএসপি রম সহ নেক্সাস 4) স্যুইচড অ্যান্ড্রয়েড কীবোর্ড (যেখানে শ্রোতা থেকে আমার কোড পরিচালনা করার পরিবর্তে, একটি নতুন লাইন ছিল) "এন্টার" কী চাপার পরে প্রবেশ করানো হয়েছে। এই সমস্যাটি সামলাতে আমাকে কিছু সময় লেগেছে, তবে আমি জানি না যে এটি কোনও ইনপুট টাইপ যা আপনি ব্যবহার করেন তা সব পরিস্থিতিতে চলবে কিনা।

তাই এখানে আমার সমাধান:

XML এ "টেক্সট" এ পাঠ্য ভিউয়ের ইনপুট টাইপ বৈশিষ্ট্যটি সেট করুন:

android:inputType="text"

কীবোর্ডে "এন্টার" কীটির লেবেলটি কাস্টমাইজ করুন:

myTextView.setImeActionLabel("Custom text", KeyEvent.KEYCODE_ENTER);

TextView এ একটি OnEditorActionListener সেট করুন:

myTextView.setOnEditorActionListener(new OnEditorActionListener()
{
    @Override
    public boolean onEditorAction(TextView v, int actionId,
        KeyEvent event)
    {
    boolean handled = false;
    if (event.getAction() == KeyEvent.KEYCODE_ENTER)
    {
        // Handle pressing "Enter" key here

        handled = true;
    }
    return handled;
    }
});

আমি আশা করি এটি অন্যদেরকে আমার সমস্যাগুলি এড়ানোর জন্য সাহায্য করবে, কারণ তারা প্রায় আমাকে বাদামে ফেলেছিল।


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

if (actionId == EditorInfo.IME_NULL && event.getAction() == KeyEvent.ACTION_DOWN)
{
    // your code here
}

কর্ম ঘটনা পুনরাবৃত্তি সম্পর্কে (তথ্য http://developer.android.com/reference/android/view/KeyEvent.html অধিষ্ঠিত) ইত্যাদি সম্পর্কে তথ্যের জন্য http://developer.android.com/reference/android/view/KeyEvent.html দেখুন।


final EditText edittext = (EditText) findViewById(R.id.edittext);
edittext.setOnKeyListener(new OnKeyListener() {
    public boolean onKey(View v, int keyCode, KeyEvent event) {
        // If the event is a key-down event on the "enter" button
        if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
            (keyCode == KeyEvent.KEYCODE_ENTER)) {
          // Perform action on key press
          Toast.makeText(HelloFormStuff.this, edittext.getText(), Toast.LENGTH_SHORT).show();
          return true;
        }
        return false;
    }
});

এখানে আপনি কি করবেন। এটি অ্যান্ড্রয়েড বিকাশকারীর নমুনা কোড 'ব্লুটুথ চ্যাট' এ লুকিয়ে রয়েছে। আপনার নিজস্ব ভেরিয়েবল এবং পদ্ধতিগুলির সাহায্যে "উদাহরণ" বলার সাহসী অংশগুলি প্রতিস্থাপন করুন।

প্রথমত, মুখ্য কার্যকলাপে আপনার যা দরকার তা আমদানি করুন যেখানে আপনি প্রত্যাবর্তন বোতামটিকে বিশেষ কিছু করতে চান:

import android.view.inputmethod.EditorInfo;
import android.widget.TextView;
import android.view.KeyEvent;

এখন, আপনার রিটার্ন কী (এখানে আমি exampleListener ব্যবহার) জন্য TextView.OnEditorActionListener একটি পরিবর্তনশীল তৈরি করুন;

TextView.OnEditorActionListener exampleListener = new TextView.OnEditorActionListener(){

তাহলে রিটার্ন বাটন চাপলে কি করতে হবে তা সম্পর্কে শ্রোতাকে দুটি জিনিস জানাতে হবে। এটি সম্পর্কে জানা দরকার যে আমরা কীভাবে EditText এর বিষয়ে কথা বলছি (এখানে আমি উদাহরণ দেখুন ), এবং তারপরে কী কী করতে হবে তা জানা দরকার যখন এন্টার কী চাপবে ( এখানে, example_confirm () )। যদি এটি আপনার ক্রিয়াকলাপের সর্বশেষ বা কেবলমাত্র সম্পাদনযোগ্য হয়, তবে আপনার জমা (অথবা ঠিক আছে, নিশ্চিত করুন, প্রেরণ করুন, সংরক্ষণ করুন, ইত্যাদি) বোতামে onClick পদ্ধতির মতো একই জিনিস করা উচিত।

public boolean onEditorAction(TextView exampleView, int actionId, KeyEvent event) {
   if (actionId == EditorInfo.IME_NULL  
      && event.getAction() == KeyEvent.ACTION_DOWN) { 
      example_confirm();//match this behavior to your 'Send' (or Confirm) button
   }
   return true;
}

অবশেষে, শ্রোতা সেট করুন (সম্ভবত আপনার অনক্রিপ্ট পদ্ধতিতে);

exampleView.setOnEditorActionListener(exampleListener);

editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
            if (actionId != 0 || event.getAction() == KeyEvent.ACTION_DOWN) {
                // Action
                return true;
            } else {
                return false;
            }
        }
    });

xml

<EditText
        android:id="@+id/editText2"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:hint="@string/password"
        android:imeOptions="actionGo|flagNoFullscreen"
        android:inputType="textPassword"
        android:maxLines="1" />

API 21 (প্রথম Android 5.0 / Lollipop SDK) হিসাবে , গোব সিমুলেটর অ্যাপ্লিকেশন ইনস্টল করা হয়েছে কিনা তা সনাক্ত করে:

/**
 * Used to determine whether the user making this call is subject to
 * teleportations.
 *
 * <p>As of {@link android.os.Build.VERSION_CODES#LOLLIPOP}, this method can
 * now automatically identify goats using advanced goat recognition technology.</p>
 *
 * @return Returns true if the user making this call is a goat.
 */
public boolean isUserAGoat() {
    return mContext.getPackageManager()
            .isPackageAvailable("com.coffeestainstudios.goatsimulator");
}

এইটিকে পরিষ্কার করা উচিত যে যদি ডিজিচলিনের সতর্কবার্তা মুক্ত হিসাবে ব্যবহার করা হয় if (false) একটি সম্ভাব্য বিপদজনক কৌশল। পূর্বে প্রতিটি ডিভাইসের জন্য false ফেরত দেওয়া কি এখন একটি আপাতদৃষ্টিতে র্যান্ডম মান প্রদান করে: যদি এটি আপনার কোডে গভীর গভীরভাবে সমাহিত করা হয় তবে আপনার নতুন বাগগুলি কোথা থেকে আসছে তা নির্ধারণ করতে দীর্ঘ সময় লাগতে পারে।

নিচের লাইন: যদি আপনি কোনও পদ্ধতি বাস্তবায়ন নিয়ন্ত্রণ করেন না এবং এপিআই ডকুমেন্টেশনের বিবৃতি ব্যতীত অন্যান্য উদ্দেশ্যে এটি ব্যবহার করার সিদ্ধান্ত নিচ্ছেন, তবে আপনি সমস্যার জন্য শিরোনাম দিচ্ছেন।







android android-edittext android-textview