ฉันมีกิจกรรมกับ Edit Text
อินพุต เมื่อกิจกรรมเริ่มต้นขึ้นแป้นพิมพ์ Android จะปรากฏขึ้น แป้นพิมพ์จะยังคงซ่อนอยู่ได้อย่างไรจนกว่าผู้ใช้จะเน้นการป้อนข้อมูล
android:windowSoftInputMode="adjustPan"
อย่างไร?
ฉันมีกิจกรรมกับ Edit Text
อินพุต เมื่อกิจกรรมเริ่มต้นขึ้นแป้นพิมพ์ Android จะปรากฏขึ้น แป้นพิมพ์จะยังคงซ่อนอยู่ได้อย่างไรจนกว่าผู้ใช้จะเน้นการป้อนข้อมูล
android:windowSoftInputMode="adjustPan"
อย่างไร?
คำตอบ:
ฉันคิดว่าสิ่งต่อไปนี้อาจใช้ได้
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
ฉันเคยใช้มันเพื่อสิ่งนี้มาก่อน
EditText
? :) นี่คือการซ่อนแป้นพิมพ์เมื่อกิจกรรมเริ่มต้นซึ่งมีEditText
ลองสิ่งนี้ด้วย -
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
ค่าที่ต้องการadjustResize
หรือadjustPan
คุณสามารถรวมสองค่าเช่น:
<activity
...
android:windowSoftInputMode="stateHidden|adjustPan"
...
>
การดำเนินการนี้จะซ่อนแป้นพิมพ์เมื่อใดก็ตามที่เหมาะสม แต่กวาดมุมมองกิจกรรมในกรณีที่ต้องแสดงแป้นพิมพ์
ซ่อนมันสำหรับกิจกรรมทั้งหมดโดยใช้ธีม
<style name="MyTheme" parent="Theme">
<item name="android:windowSoftInputMode">stateHidden</item>
</style>
กำหนดธีม
<application android:theme="@style/MyTheme">
เพิ่มคุณสมบัติทั้งสองนี้ให้กับโครงร่างหลักของคุณ (เช่น: Linear Layout, Relative Layout)
android:focusable="false"
android:focusableInTouchMode="false"
มันจะทำเคล็ดลับ :)
true
งานได้ตามคำตอบของ Jack T มีการเปลี่ยนแปลงพฤติกรรมในรุ่นล่าสุดหรือไม่?
false
จึงควรใช้งานได้เนื่องจากเป็นแนวคิดที่จะให้ความสำคัญกับช่อง EditText
พยายามที่จะประกาศในไฟล์ Menifest
<activity android:name=".HomeActivity"
android:label="@string/app_name"
android:windowSoftInputMode="stateAlwaysHidden"
>
หากคุณใช้ API ระดับ 21 คุณสามารถใช้ editText.setShowSoftInputOnFocus (false);
เพียงเพิ่มใน AndroidManifest.xml
<activity android:name=".HomeActivity" android:windowSoftInputMode="stateHidden">
</activity>
เพียงเพิ่มสิ่งนี้ในไฟล์ manifest.xml ของคุณ
<activity android:name=".MainActivity"
android:windowSoftInputMode="stateHidden">
คุณทำเสร็จแล้ว
คุณยังสามารถเขียนบรรทัดของรหัสเหล่านี้ในโครงร่างพาเรนต์โดยตรงของไฟล์โครงร่าง. 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>
แก้ไข:
ตัวอย่างถ้า EditText อยู่ในเลย์เอาต์อื่น:
<?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>
กุญแจสำคัญคือการทำให้แน่ใจว่า EditText ไม่สามารถโฟกัสได้โดยตรง
บาย! ;-)
ทางออกที่ดีที่สุดสำหรับฉันวางชั้นเรียนของคุณ
@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();
}
ฟังก์ชั่นเพื่อซ่อนคีย์บอร์ด
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">
หากต้องการขยายคำตอบที่ได้รับการยอมรับโดย @Lucas:
เรียกสิ่งนี้จากกิจกรรมของคุณในหนึ่งในกิจกรรมวัฏจักรชีวิตยุคต้น:
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
override fun onResume() {
super.onResume()
window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN)
}
คุณสามารถลองใช้ชุดคุณลักษณะที่เป็นเอกลักษณ์สำหรับแต่ละองค์ประกอบ
TextView mtextView = findViewById(R.id.myTextView);
mtextView.setShowSoftInputOnFocus(false);
แป้นพิมพ์จะไม่แสดงในขณะที่องค์ประกอบโฟกัสอยู่
//to hide the soft keyboard
InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(v.getWindowToken(), 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);
}
<activity android:windowSoftInputMode="stateHidden" ...>