আমি কীভাবে প্রোগ্রামটিভ করে আমার এডিটেক্সটটিতে ফোকাস (এবং কীবোর্ডটি প্রদর্শন করব) সেট করতে পারি


179

আমার একটি লেআউট রয়েছে যার মধ্যে কিছু মতামত রয়েছে:

<LinearLayout>
<TextView...>
<TextView...>
<ImageView ...>
<EditText...>
<Button...>
</linearLayout>

আমি কীভাবে আমার EditTextপ্রোগ্রামটিমেটিকভাবে ফোকাস (কী-বোর্ডটি প্রদর্শন) সেট করতে পারি ?

আমি এটি চেষ্টা করেছি এবং এটি কেবল তখনই কার্যকর হয় যখন আমি আমার Activityসাধারণত চালু করি , তবে যখন আমি এটি এ চালু করি তখন TabHostএটি কার্যকর হয় না।

txtSearch.setFocusableInTouchMode(true);
txtSearch.setFocusable(true);
txtSearch.requestFocus();


উত্তর:


352

এটা চেষ্টা কর:

EditText editText = (EditText) findViewById(R.id.myTextViewId);
editText.requestFocus();
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);

http://developer.android.com/reference/android/view/View.html#requestFocus ()


এই উত্তর থেকে কীবোর্ডকে বাধ্য করতে কোড সহ আপডেট হয়েছে: স্ট্যাকওভারফ্লো
ডেভিড

5
এটি কেবল তখনই কার্যকর হয় যখন আমি আমার ক্রিয়াকলাপটি স্বাভাবিকভাবে চালু করি তবে যখন আমি আমার ট্যাবহোস্টে আমার ক্রিয়াকলাপটি চালু করি তখন এটি কার্যকর হয় না
হিউসিন

27
এটি কাজ করে না। এটি আমার জন্য কাজ করে ইনপুটমেথডম্যানেজার ইমিট = (ইনপুটমেথডম্যানেজার) গিস্টিস্টেম সার্ভিস (কনটেক্সট ININPUT_METHOD_SERVICE); im.toggleSoftInput (ইনপুটমেথডম্যানেজ। SHOW_FORCED, 0);
Günay Gültekin

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

2
উত্তরে 237 এবং "এটি ভাইয়ের কাজ করে না" 62 এর উপরে ভোট দেয় 🤔 আমি নিজের মতামত পাওয়ার জন্য এটি পরীক্ষা করেছি এবং এটি নিখুঁত কাজ করে!)
ড্যানিয়েল

165

ব্যবহার করুন:

editText.requestFocus();
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);

20
আরও 5 টিরও বেশি পদ্ধতির চেষ্টা করার পরে, এটি কেবলমাত্র আমার জন্য কাজ করেছিল ( Viewউপশ্রেন থেকে )
উইলিয়াম

13
এই পরামর্শটি কীবোর্ড স্থির হওয়ার দিকে পরিচালিত করে, এমনকি যখন ক্ষেত্রটি ফোকাস হারাতে পারে।
অবধি

2
হ্যাঁ, এটি আমার পক্ষেও imm.showSoftInput()কাজ করে , এবং কাজ করে না।
স্পার্ক.বাও

8
এই পদ্ধতিটি কাজ করার সময়, এটির নীচের দিক রয়েছে, হোম বোতাম (হার্ডওয়্যার) দিয়ে অ্যাপ্লিকেশনটি প্রস্থান করার ফলে কীবোর্ডটি স্ক্রিনে চলে যাবে। কীবোর্ডটি লুকানোর জন্য আপনাকে রিটার্ন বোতাম (হার্ডওয়্যার) টিপতে হবে এটি আপনার হোম স্ক্রিনে অকেজো বলে।
অ্যাড্রিয়েন হর্নিজগুলি

অন্যান্য পন্থাগুলি আমার পক্ষে কাজ করে নি, এটি একটি করেছে। ধন্যবাদ.
ইমান আকবরী

53

এটি আমার পক্ষে কাজ করেছে, উঙ্গালক্রাইজকে ধন্যবাদ

কীবোর্ড দেখান:

editText = (EditText)findViewById(R.id.myTextViewId);
editText.requestFocus();
InputMethodManager imm = (InputMethodManager)getSystemService(this.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,InputMethodManager.HIDE_IMPLICIT_ONLY);

কীবোর্ড লুকান:

InputMethodManager imm = (InputMethodManager) getSystemService(this.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);

2
একমাত্র সম্পূর্ণ সমাধান। ধন্যবাদ।
কোরো

41

showSoftInput আমার পক্ষে মোটেও কাজ করছিল না।

আমি অনুভব করেছি যে আমার ইনপুট মোডটি সেট করতে হবে: android:windowSoftInputMode="stateVisible"(এখানে প্রকাশের ক্রিয়াকলাপের উপাদানটিতে)

এই সাহায্য আশা করি!


5
ক্রিয়াকলাপটি শুরু হওয়ার পরে এটি কেবল কীবোর্ডটি দেখিয়েছিল।
উইলিয়াম

1
অসাধারণ :) একগুচ্ছ উত্তর চেষ্টা করেছিলাম তবে কেবল এটির সাহায্যে আমি এটি কাজ করতে পারি :) আপনাকে অনেক ধন্যবাদ।
শ্রীকান্ত

খুব আন্ডাররেটেড উত্তর
অবিনাশ আর

নিখুঁত উত্তর. শুধুমাত্র "editText.requestFocus ()" দিয়ে কাজ করে। ধন্যবাদ।
এভিজে

37
final EditText tb = new EditText(this);
tb.requestFocus();
tb.postDelayed(new Runnable() {
    @Override
    public void run() {
        InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        inputMethodManager.showSoftInput(tb, InputMethodManager.SHOW_IMPLICIT);
    }
}, 1000);

1
এটির রিসুম () তে প্রদর্শিত হওয়ার জন্য আমাকে এটি করতে হয়েছিল। দেরি না করে এই থ্রেডে বর্ণিত প্রতিটি একক সমাধান ব্যবহার করে কিছুই ঘটবে না।
ফ্রান্ট্রিকরক

1
এটা আছে। এই আমি উত্তর খুঁজছিলাম ছিল। যদিও, আপনার প্রয়োজন হয় না পুরোপুরি দ্বিতীয় দেরী। আমি চেষ্টা করেছি মাত্র 150 মিলিস, এবং এটিও দুর্দান্ত কাজ করেছে।
রাবারডাক্ক

1
ধন্যবাদ! এটি 0 এমএস ( tb.post({ showKeyboard(tb) })) এর জন্যও কাজ করে । লক্ষ্য করুন যে আমাদের একটি সম্পাদনা পাঠ্য ভিউ ( tb) দরকার, খণ্ডিত দর্শন নয়।
কুলমাইন্ড

16

সফট কীবোর্ডটি প্রদর্শন এবং লুকানোর জন্য কোটলিন এক্সটেনশনটি এখানে কীভাবে তৈরি করা যায়:

fun View.showKeyboard() {
  this.requestFocus()
  val inputMethodManager = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
  inputMethodManager.showSoftInput(this, InputMethodManager.SHOW_IMPLICIT)
}

fun View.hideKeyboard() {
  val inputMethodManager = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
  inputMethodManager.hideSoftInputFromWindow(windowToken, 0)
}

তারপরে আপনি কেবল এটি করতে পারেন:

editText.showKeyboard()
// OR
editText.hideKeyboard()

বিশ্রামের তুলনায় এটি আরও ভাল সমাধান
ডি-ফিভারেক্স

5

আমি ব্যবহার করার প্রস্তাব LifecycleObserver যা অংশ লাইফ সাইকল-সচেতন উপাদান সঙ্গে পরিচালনা Lifecycles এর অ্যান্ড্রয়েড জেটপ্যাক

আমি যখন খণ্ড / ক্রিয়াকলাপ প্রদর্শিত হবে তখন আমি কীবোর্ডটি খুলতে এবং বন্ধ করতে চাই। প্রথমত, সম্পাদনা পাঠের জন্য দুটি এক্সটেনশন ফাংশন নির্ধারণ করুন । আপনি এগুলি আপনার প্রকল্পের যে কোনও জায়গায় রাখতে পারেন:

fun EditText.showKeyboard() {
    requestFocus()
    val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
    imm.showSoftInput(this, InputMethodManager.SHOW_IMPLICIT)
}

fun EditText.hideKeyboard() {
    val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
    imm.hideSoftInputFromWindow(this.windowToken, 0)
}

তারপরে একটি লাইফাইসাইকেলসবার্সার সংজ্ঞা দিন যা ক্রিয়াকলাপ / খণ্ডটি পৌঁছলে onResume()বা কীবোর্ডটি খোলে এবং বন্ধ করে দেয় onPause:

class EditTextKeyboardLifecycleObserver(private val editText: WeakReference<EditText>) :
    LifecycleObserver {

    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
    fun openKeyboard() {
        editText.get()?.postDelayed({ editText.get()?.showKeyboard() }, 100)
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
    fun closeKeyboard() {
        editText.get()?.hideKeyboard()
    }
}

তারপরে আপনার যেকোন টুকরো / ক্রিয়াকলাপের সাথে নীচের লাইনটি যুক্ত করুন, আপনি যেকোন সময় লাইফাইকেলঅবার্সারটি পুনরায় ব্যবহার করতে পারেন। যেমন খণ্ডের জন্য:

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

    // inflate the Fragment layout

    lifecycle.addObserver(EditTextKeyboardLifecycleObserver(WeakReference(myEditText)))

    // do other stuff and return the view

}

3

কীবোর্ডটি লুকিয়ে রাখতে এবং দেখানোর জন্য এখানে কী-বোর্ড হেল্পার ক্লাস

import android.content.Context;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;

/**
 * Created by khanhamza on 06-Mar-17.
 */

public class KeyboardHelper {
public static void hideSoftKeyboard(Context context, View view) {
    if (context == null) {
        return;
    }
    view.requestFocus();
    view.postDelayed(new Runnable() {
        @Override
        public void run() {
            InputMethodManager imm = (InputMethodManager) context
                    .getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
        }
    }, 1000);
}

public static void hideSoftKeyboard(Context context, EditText editText) {
    editText.requestFocus();
    editText.postDelayed(new Runnable() {
        @Override
        public void run() {
            InputMethodManager imm = (InputMethodManager) context
                    .getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);
        }
    }, 1000);
}


public static void openSoftKeyboard(Context context, EditText editText) {
    editText.requestFocus();
    editText.postDelayed(new Runnable() {
        @Override
        public void run() {
            InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);
        }
    }, 1000);
}

}


0

প্রথম উপায় :

    etPassword.post(() -> {
        etPassword.requestFocus();
        InputMethodManager manager = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
        manager.showSoftInput(etPassword, InputMethodManager.SHOW_IMPLICIT);
    });

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

প্রকাশে:

    <activity
        android:name=".activities.LoginActivity"
        android:screenOrientation="portrait"
        android:windowSoftInputMode="stateVisible"/>

কোডে:

etPassword.requestFocus();

0

আমি অনেক উপায়ে চেষ্টা করেছি এবং এটি কার্যকরভাবে কাজ করছে না, এটি নিশ্চিত নয় কারণ আমি খণ্ডগুলি থেকে সম্পাদনা পাঠ্যের ক্রিয়াকলাপে ভাগ করে নেওয়া রূপান্তরটি ব্যবহার করছি।

বিটিডব্লিউ আমার সম্পাদনাটি লিনিয়ারলআউটেও মোড়ানো আছে।

আমি ফোকাসের অনুরোধ করতে কিছুটা বিলম্ব যুক্ত করেছি এবং নীচের কোডটি আমার পক্ষে কাজ করেছে: (কোটলিন)

 et_search.postDelayed({
     editText.requestFocus()

     showKeyboard()
 },400) //only 400 is working fine, even 300 / 350, the cursor is not showing

showKeyboard ()

 val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
 imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0)

0
editTxt.setOnFocusChangeListener { v, hasFocus ->
            val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
            if (hasFocus) {
                imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY)
            } else {
                imm.hideSoftInputFromWindow(v.windowToken, 0)
            }
        }

-1

আমি এই উত্তরগুলির নিজস্ব কোনও কাজ করতে পারি না। আমার জন্য সমাধানটি তাদের একত্রিত করা ছিল:

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);
editText.requestFocus();
imm.showSoftInput(editText, InputMethodManager.SHOW_FORCED);

আমার পক্ষে কেন এটি প্রয়োজন হয়েছিল তা আমি নিশ্চিত নই - ডক্স অনুসারে মনে হয় যে কোনও পদ্ধতিই তাদের নিজস্বভাবে কাজ করা উচিত ছিল।


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