วิธีซ่อน Soft Keyboard เมื่อกิจกรรมเริ่มขึ้น


151

ฉันมี Edittext ด้วยandroid:windowSoftInputMode="stateVisible"ใน Manifest ตอนนี้แป้นพิมพ์จะปรากฏขึ้นเมื่อฉันเริ่มกิจกรรม จะซ่อนมันได้อย่างไร? ฉันไม่สามารถใช้android:windowSoftInputMode="stateHiddenเพราะเมื่อมองเห็นแป้นพิมพ์แล้วย่อขนาดแอปให้เล็กลงและกลับมาใช้งานแป้นพิมพ์ควรจะมองเห็นได้ ฉันลองด้วย

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

แต่มันไม่ทำงาน

คำตอบ:


1

หากคุณไม่ต้องการใช้ xml ให้สร้าง Kotlin Extension เพื่อซ่อนแป้นพิมพ์

// In onResume, call this
myView.hideKeyboard()

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

ทางเลือกขึ้นอยู่กับกรณีการใช้งาน:

fun Fragment.hideKeyboard() {
    view?.let { activity?.hideKeyboard(it) }
}

fun Activity.hideKeyboard() {
    // Calls Context.hideKeyboard
    hideKeyboard(currentFocus ?: View(this))
}

fun Context.hideKeyboard(view: View) {
    view.hideKeyboard()
}

วิธีแสดงคีย์บอร์ดนุ่ม

fun Context.showKeyboard() { // Or View.showKeyboard()
    val inputMethodManager = context.getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
    inputMethodManager.toggleSoftInput(SHOW_FORCED, HIDE_IMPLICIT_ONLY)
}

วิธีที่ง่ายกว่าเมื่อขอโฟกัสไปที่ edittext พร้อมกัน

myEdittext.focus()

fun View.focus() {
    requestFocus()
    showKeyboard()
}

การทำให้เข้าใจง่ายโบนัส:

ลบข้อกำหนดสำหรับการใช้งานอยู่ตลอดเวลาgetSystemService: Splitties Library

// Simplifies above solution to just
inputMethodManager.hideSoftInputFromWindow(windowToken, 0)

361

ในAndroidManifest.xml:

<activity android:name="com.your.package.ActivityName"
          android:windowSoftInputMode="stateHidden"  />

หรือลอง

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

โปรดตรวจสอบสิ่งนี้ด้วย


3
ขอบคุณสำหรับ android:windowSoftInputMode="stateHidden"
Shylendra Madda

2
ที่จริงแล้วยังมีคำตอบที่ดีในการป้องกันไม่ให้ความสำคัญกับการแก้ไขข้อความstackoverflow.com/questions/4668210/ …
Boris Treukhov

204

ใช้ฟังก์ชั่นต่อไปนี้เพื่อแสดง / ซ่อนคีย์บอร์ด:

/**
 * Hides the soft keyboard
 */
public void hideSoftKeyboard() {
    if(getCurrentFocus()!=null) {
        InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
        inputMethodManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
    }
}

/**
 * Shows the soft keyboard
 */
public void showSoftKeyboard(View view) {
    InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
    view.requestFocus();
    inputMethodManager.showSoftInput(view, 0);
}

4
Context.INPUT_METHOD_SERVICE สำหรับผู้ที่อยู่ในชิ้นส่วนหรือไม่ได้อยู่ในกิจกรรมหลัก ฯลฯ
Oliver Dixon

7
คุณสามารถลองสิ่งนี้ มันทำงานได้ถ้าคุณเรียกมันว่าจากกิจกรรม . GetWindow () setSoftInputMode (WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
Sinan Dizdarević

ถ้าเราต้องการเรียกสิ่งนี้จากภายในผู้ฟัง? ชอบonFocusChange()
André Yuhai

44

เพียงเพิ่มสองแอตทริบิวต์ในมุมมองพาเรนต์ของ editText

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

36

ใส่สิ่งนี้ในรายการภายในแท็กกิจกรรม

  android:windowSoftInputMode="stateHidden"  

หรือ android: windowSoftInputMode = "stateUnchanged" - สิ่งนี้ทำงานเช่น: อย่าแสดงถ้ามันยังไม่ได้แสดง แต่ถ้ามันเปิดเมื่อเข้าสู่กิจกรรมให้เปิดทิ้งไว้)
Sujeet Kumar Gupta

คุณถูกต้องแล้ว แต่ถ้าการปฐมนิเทศเปลี่ยนไป
Saneesh

26

ลองสิ่งนี้:

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

ดูที่นี่เพื่อดูรายละเอียดเพิ่มเติม


14

หากต้องการซ่อน softkeyboard ในช่วงเวลาของกิจกรรมเริ่มต้นใหม่หรือที่onCreate(), onStart()ฯลฯ คุณสามารถใช้โค้ดด้านล่าง:

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

10

ใช้AndroidManifest.xml

<activity android:name=".YourActivityName"
      android:windowSoftInputMode="stateHidden"  
 />

ใช้จาวา

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

การใช้คีย์บอร์ดโซลูชันด้านบนซ่อน แต่ edittext จากการมุ่งเน้นเมื่อมีการสร้าง activiy แต่คว้ามันเมื่อคุณสัมผัสพวกเขาโดยใช้:

เพิ่มในEditTextของคุณ

<EditText
android:focusable="false" />

ยังเพิ่มผู้ฟัง EditText ของคุณ

youredittext.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
    v.setFocusable(true);
    v.setFocusableInTouchMode(true);
    return false;
}});

7

เพิ่มข้อความต่อไปนี้ในไฟล์ xml ของคุณ

<!--Dummy layout that gain focus -->
            <LinearLayout
                android:layout_width="0dp"
                android:layout_height="0dp"
                android:focusable="true"
                android:focusableInTouchMode="true"
                android:orientation="vertical" >
            </LinearLayout>

6

ฉันหวังว่านี้จะทำงานผมพยายามมาก fragmentsแต่วิธีนี้ทำงานสำหรับฉันใน เพียงใส่บรรทัดนี้ในสร้างมุมมอง / init

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

5

ในการซ่อนซอฟต์คีย์บอร์ดในขณะที่เริ่มกิจกรรมใหม่หรือ onCreate () วิธีการ onStart () ฯลฯ ใช้รหัสด้านล่าง:

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

ในการซ่อนซอฟต์คีย์บอร์ดในขณะที่ปุ่มคลิกอยู่ในกิจกรรม:

View view = this.getCurrentFocus();

    if (view != null) {
        InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
        assert imm != null;
        imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
    }


5

เพิ่มในกิจกรรมของคุณในรายการคุณสมบัตินี้

android:windowSoftInputMode="stateHidden" 

4

ใส่รหัสนี้ไฟล์จาวาของคุณและส่งผ่านอาร์กิวเมนต์สำหรับวัตถุบน edittext

private void setHideSoftKeyboard(EditText editText){
    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);
}

4

คุณสามารถตั้งค่า config บน AndroidManifest.xml

ตัวอย่าง:

<activity
    android:name="Activity"
    android:configChanges="orientation|keyboardHidden"
    android:theme="@*android:style/Theme.NoTitleBar"
    android:launchMode="singleTop"
    android:windowSoftInputMode="stateHidden"/>

4

ใช้รหัสต่อไปนี้เพื่อซ่อนซอฟต์คีย์บอร์ดเป็นครั้งแรกเมื่อคุณเริ่มกิจกรรม

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

3

ลองอันนี้ด้วย

Ed_Cat_Search = (EditText) findViewById(R.id.editText_Searc_Categories);

Ed_Cat_Search.setInputType(InputType.TYPE_NULL);

Ed_Cat_Search.setOnTouchListener(new View.OnTouchListener() {
    public boolean onTouch(View v, MotionEvent event) {
        Ed_Cat_Search.setInputType(InputType.TYPE_CLASS_TEXT);
        Ed_Cat_Search.onTouchEvent(event); // call native handler
        return true; // consume touch even
    }
});

3

คำตอบข้างต้นก็ถูกต้องเช่นกัน ฉันแค่อยากให้สั้น ๆ ว่ามีสองวิธีในการซ่อนแป้นพิมพ์เมื่อเริ่มกิจกรรมจาก manifest.xml เช่น:

<activity
..........
android:windowSoftInputMode="stateHidden"
..........
/>
  • วิธีข้างต้นซ่อนไว้เสมอเมื่อเข้าสู่กิจกรรม

หรือ

<activity
..........
android:windowSoftInputMode="stateUnchanged"
..........
/>
  • สิ่งนี้บอกว่าอย่าเปลี่ยนมัน (เช่นไม่แสดงถ้ามันยังไม่ได้แสดง แต่ถ้ามันเปิดเมื่อเข้าสู่กิจกรรมให้เปิดทิ้งไว้)

2

นี่คือสิ่งที่ฉันทำ:

yourEditText.setCursorVisible(false); //This code is used when you do not want the cursor to be visible at startup
        yourEditText.setOnTouchListener(new View.OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                v.onTouchEvent(event);   // handle the event first
                InputMethodManager imm = (InputMethodManager)v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
                if (imm != null) {

                    imm.hideSoftInputFromWindow(v.getWindowToken(), 0);  // hide the soft keyboard
                    yourEditText.setCursorVisible(true); //This is to display cursor when upon onTouch of Edittext
                }
                return true;
            }
        });

2

หากแอปพลิเคชันของคุณกำหนดเป้าหมายAndroid API ระดับ 21 หรือมากกว่านั้นจะมีวิธีการเริ่มต้นให้ใช้งาน

editTextObj.setShowSoftInputOnFocus(false);

ตรวจสอบให้แน่ใจว่าคุณได้ตั้งรหัสด้านล่างในEditTextแท็ก XML

<EditText  
    ....
    android:enabled="true"
    android:focusable="true" />

1

ลองสิ่งนี้

ก่อนอื่นในฟิลด์ xml ที่ค้นหาได้ของคุณ (ชื่อและคำใบ้อื่น ๆ ) ใส่@stringและไม่ใช่สตริงตัวอักษร

จากนั้นวิธีการonCreateOptionsMenuนั้นจะต้องมีComponentNameวัตถุที่มีชื่อแพคเกจของคุณและชื่อคลาสที่สมบูรณ์ของคุณ (พร้อมชื่อแพคเกจ) - ในกรณีที่กิจกรรมที่มีSearchViewส่วนประกอบเหมือนกันกับผลการค้นหาที่ใช้แสดงgetComponentName()เป็นนักพัฒนา Google Android กล่าวว่า

ฉันลองใช้วิธีแก้ปัญหาจำนวนมากและหลังจากนั้นมากทำงานได้ผลดีมากสำหรับฉัน


1
Ed_Cat_Search = (EditText) findViewById(R.id.editText_Searc_Categories);

Ed_Cat_Search.setInputType(InputType.TYPE_NULL);

Ed_Cat_Search.setOnTouchListener(new View.OnTouchListener() {
    public boolean onTouch(View v, MotionEvent event) {
        Ed_Cat_Search.setInputType(InputType.TYPE_CLASS_TEXT);
        Ed_Cat_Search.onTouchEvent(event); // call native handler
        return true; // consume touch even
    }
});

this one worked for me

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

มันจะได้ผล


ในขณะที่รหัสนี้อาจตอบคำถาม แต่มีบริบทเพิ่มเติมเกี่ยวกับสาเหตุและ / หรือวิธีการที่รหัสนี้ตอบคำถามช่วยปรับปรุงมูลค่าระยะยาว
rollstuhlfahrer
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.