ক্রিয়াকলাপটি ক্রিয়াকলাপ শুরু হতে বাধা দিন


265

আমার একটি Edit Textইনপুট সহ একটি ক্রিয়াকলাপ আছে । ক্রিয়াকলাপটি শুরু করা হলে অ্যান্ড্রয়েড কীবোর্ড প্রদর্শিত হয় shown ব্যবহারকারী ইনপুটটিতে ফোকাস না করা পর্যন্ত কী কীবোর্ডটি লুকিয়ে থাকতে পারে?


93
আপনার ম্যানিফেস্টে<activity android:windowSoftInputMode="stateHidden" ...>
ইডিয়টটিগার


1
কিভাবে একসাথে ব্যবহার করবেন android:windowSoftInputMode="adjustPan"?
জানুস

4
@ জোনস অ্যান্ড্রয়েড: উইন্ডোসফটআইনপুটমোড = "অ্যাডজাস্টপ্যান | স্টেটহিডেন"
আলেক্সি স্ট্র্যাখ

: এই মন্তব্যটি উত্তর, উত্তর আমি চাই ছিল stackoverflow.com/a/23605510/6942602
korchix

উত্তর:


436

আমি মনে করি নিম্নলিখিতটি কাজ করতে পারে

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);

আমি আগে এই ধরণের জিনিস জন্য এটি ব্যবহার করেছি।


এটির জন্য কেবলমাত্র অঙ্কের কীপ্যাড হিসাবে সেট করার কোনও উপায় আছে? অর্থাৎ 12 কী কীবোর্ড?
মোহাম্মদ খামিস

@ মোহামেখামিস ইনপুট.সেট রাউইনপুট টাইপ (কনফিগারেশন.কি.ওয়াইআরআরড_12 কেইই);
ব্লকওয়ালা

1
হ্যাঁ এটি এখনও কাজ করে। @ সাগরনায়েক আপনি কেন কীবোর্ডটি আড়াল করতে চান EditText? :) ক্রিয়াকলাপ শুরু হওয়ার সাথে সাথে কীবোর্ডটি লুকানো হয় যা রয়েছে যার মধ্যে রয়েছেEditText
মার্টিনাস

@ ডেভাল্টে 7 বছর পরে এবং এটি আমার পক্ষে কাজ করেছিল, আপনি কি এটি অনক্রিটে রেখেছিলেন?
ডায়মাস 13'19

@ ডায়মাস হ্যাঁ, এবং আমি ঠিক কয়েক মাস আগে এটি ঠিক করেছি :)
ডিভাল্টে 13'19

180

এটিও চেষ্টা করে দেখুন -

this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

অন্যথায়, আপনার ম্যানিফেস্ট ফাইলের ক্রিয়াকলাপে ঘোষণা করুন -

<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".Main"
          android:label="@string/app_name"
          android:windowSoftInputMode="stateHidden"
          >

আপনি যদি ইতিমধ্যে বা এর android:windowSoftInputModeমতো মানের জন্য ব্যবহার করে থাকেন তবে আপনি দুটি মান একত্র করতে পারেন:adjustResizeadjustPan

<activity
        ...
        android:windowSoftInputMode="stateHidden|adjustPan"
        ...
        >

এটি যখনই উপযুক্ত হবে কীবোর্ডটি আড়াল করে রাখবে, তবে কীবোর্ডটি প্রদর্শিত হতে হবে সেক্ষেত্রে কার্যকলাপের দৃশ্যটি প্যান করুন।


3
কোড এবং এক্সএমএল উভয়ই দেখানোর জন্য ধন্যবাদ! আসলে এটিই সবচেয়ে সঠিক উত্তর! বিশেষত যেহেতু 3 মিনিটই আপনি উভয় পদ্ধতিই লেখার জন্য ব্যয় করেছেন যা আপনাকে প্রথমে নয় ;-)
এরিক

34

থিমটি ব্যবহার করে সমস্ত ক্রিয়াকলাপের জন্য এটি লুকান

<style name="MyTheme" parent="Theme">
    <item name="android:windowSoftInputMode">stateHidden</item>
</style>

থিম সেট করুন

<application android:theme="@style/MyTheme">

এই বিশ্বব্যাপী পদ্ধতির মত
Rm558

1
আমি বিভিন্ন স্থানে বিভিন্ন থিম ব্যবহার করছিলাম বলে এটি কাজ করেছিল
nmxprime

22

আপনার প্যারেন্ট লেআউটে এই দুটি বৈশিষ্ট্য যুক্ত করুন (উদা: লিনিয়ার লেআউট, আপেক্ষিক লেআউট)

android:focusable="false"
android:focusableInTouchMode="false" 

এটি কৌশলটি করবে :)


2
trueজ্যাক টি এর উত্তর অনুসারে এটি আমার পক্ষে কাজ করে না, তবে তাদের কাজ করে works সাম্প্রতিক সংস্করণগুলিতে কি কোনও আচরণ পরিবর্তন হয়েছিল?
প্রোটিয়ান

আমার উত্তর ছাড়াও, আপনাকে অন্যান্য বৈশিষ্ট্য যা আপনার প্রকাশ্যে এবং পাঠ্য সম্পাদনা করার জন্য রয়েছে তাও পরীক্ষা করতে হবে।
মাসেসের কিং

আমার এগুলিতে সর্বাধিক প্রাথমিক বৈশিষ্ট্য রয়েছে। falseএডিটিংয়ের কাজটি কেন করা উচিত তা আমি বুঝতে পারি না , কারণ এডিটেক্সট বাক্সগুলি থেকে ফোকাস সরিয়ে নেওয়া।
প্রোটিয়ান

প্যারেন্ট লেআউটটি থেকে দূরে সরিয়ে এডিটেক্সট বক্সগুলি থেকে ফোকাসটি এড়াতে ব্যবহার করা হতে পারে? তবে আর তা নয়, মনে হয়।
প্রোটিয়ান

13

মেনিফেস্ট ফাইলে এটি ঘোষণা করার চেষ্টা করুন

<activity android:name=".HomeActivity"
      android:label="@string/app_name"
      android:windowSoftInputMode="stateAlwaysHidden"
      >

11

আপনি যদি 21 স্তরের API ব্যবহার করেন তবে আপনি editText.setShowSoftInputOnFocus (মিথ্যা) ব্যবহার করতে পারেন;



8

এটি আপনার প্রকাশ্য। এক্সএমএল ফাইলটিতে যুক্ত করুন

<activity android:name=".MainActivity"
            android:windowSoftInputMode="stateHidden">

আপনি সব সম্পন্ন হয়েছে।


7

আপনি .xML লেআউট ফাইলের সরাসরি প্যারেন্ট লেআউটে কোডের এই লাইনগুলি লিখতে পারেন যাতে আপনার "সমস্যা" রয়েছে:

android:focusable="true"
android:focusableInTouchMode="true"

উদাহরণ স্বরূপ:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    ...
    android:focusable="true"
    android:focusableInTouchMode="true" >

    <EditText
        android:id="@+id/myEditText"
        ...
        android:hint="@string/write_here" />

    <Button
        android:id="@+id/button_ok"
        ...
        android:text="@string/ok" />
</LinearLayout>


সম্পাদনা:

উদাহরণ যদি এডিটেক্সট অন্য লেআউটে অন্তর্ভুক্ত থাকে:

<?xml version="1.0" encoding="utf-8"?>
<ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    ... >                                            <!--not here-->

    ...    <!--other elements-->

    <LinearLayout
        android:id="@+id/theDirectParent"
        ...
        android:focusable="true"
        android:focusableInTouchMode="true" >        <!--here-->

        <EditText
            android:id="@+id/myEditText"
            ...
            android:hint="@string/write_here" />

        <Button
            android:id="@+id/button_ok"
            ...
            android:text="@string/ok" />
    </LinearLayout>

</ConstraintLayout>

কীটি হ'ল এডিট টেক্সট সরাসরি ফোকাসযোগ্য নয় তা নিশ্চিত করা।
বিদায়! ;-)


6

আমার জন্য সেরা সমাধান, আপনার ক্লাসটি পেস্ট করুন

@Override
public void onResume() {
    this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
    super.onResume();
}

@Override
public void onStart() {
    this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
    super.onStart();
}

3

কীবোর্ডটি আড়াল করার কাজ ction

public static void hideKeyboard(Activity activity) {
    View view = activity.getCurrentFocus();

    if (view != null) {
        InputMethodManager inputManager = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);

        inputManager.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
    }
}

AndroidManifext.xML ফাইলে কীবোর্ডটি লুকান।

<activity
    android:name=".MainActivity"
    android:label="@string/app_name"
    android:theme="@style/AppTheme"
    android:windowSoftInputMode="stateHidden">

3

@ লুকাসের দ্বারা গৃহীত উত্তরের উপর প্রসারিত করতে:

প্রাথমিক জীবনচক্রের একটিতে আপনার ক্রিয়াকলাপ থেকে এটি কল করুন:

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);

কোটলিন উদাহরণ:

override fun onResume() {
  super.onResume()

  window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN)
}

2

আপনি প্রতিটি উপাদান জন্য এই সেট অনন্য বৈশিষ্ট্য চেষ্টা করতে পারেন

TextView mtextView = findViewById(R.id.myTextView);
mtextView.setShowSoftInputOnFocus(false);

উপাদান ফোকাস করার সময় কীবোর্ডটি প্রদর্শিত হবে না


যদিও এটি লেখকদের প্রশ্নের উত্তর দিতে পারে, এতে কিছু ব্যাখ্যাকারী শব্দ এবং / অথবা ডকুমেন্টেশনের লিঙ্কের অভাব রয়েছে। আশেপাশে কিছু বাক্যাংশ ছাড়া কাঁচা কোড স্নিপেটগুলি খুব বেশি সহায়ক হয় না। আপনি কীভাবে একটি ভাল উত্তর লিখতে পারেন তা খুব সহায়ক। দয়া করে আপনার উত্তরটি সম্পাদনা করুন - পর্যালোচনা থেকে
নিক


0

এটি কেবল আপনার ক্রিয়াকলাপে যুক্ত করুন:

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
      if (getCurrentFocus() != null) {
           InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
           imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
      }
      return super.dispatchTouchEvent(ev);
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.