Tôi có một hoạt động với một Edit Text
đầu vào. Khi hoạt động được khởi tạo, bàn phím Android sẽ hiển thị. Làm thế nào bàn phím có thể bị ẩn cho đến khi người dùng tập trung đầu vào?
android:windowSoftInputMode="adjustPan"
?
Tôi có một hoạt động với một Edit Text
đầu vào. Khi hoạt động được khởi tạo, bàn phím Android sẽ hiển thị. Làm thế nào bàn phím có thể bị ẩn cho đến khi người dùng tập trung đầu vào?
android:windowSoftInputMode="adjustPan"
?
Câu trả lời:
Tôi nghĩ rằng những điều sau đây có thể làm việc
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
Tôi đã sử dụng nó cho loại điều này trước đây.
EditText
? :) Đây là để ẩn bàn phím khi hoạt động bắt đầu có chứaEditText
Hãy thử điều này cũng -
this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
Nếu không, hãy khai báo trong hoạt động của tệp kê khai của bạn -
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".Main"
android:label="@string/app_name"
android:windowSoftInputMode="stateHidden"
>
Nếu bạn đã và đang sử dụng android:windowSoftInputMode
cho một giá trị như adjustResize
hoặc adjustPan
, bạn có thể kết hợp hai giá trị như:
<activity
...
android:windowSoftInputMode="stateHidden|adjustPan"
...
>
Điều này sẽ ẩn bàn phím bất cứ khi nào thích hợp, nhưng xoay chế độ xem hoạt động trong trường hợp bàn phím phải được hiển thị.
Ẩn nó cho tất cả các hoạt động sử dụng chủ đề
<style name="MyTheme" parent="Theme">
<item name="android:windowSoftInputMode">stateHidden</item>
</style>
đặt chủ đề
<application android:theme="@style/MyTheme">
Thêm hai thuộc tính này vào bố trí cha mẹ của bạn (ví dụ: Bố cục tuyến tính, Bố cục tương đối)
android:focusable="false"
android:focusableInTouchMode="false"
Nó sẽ thực hiện các mẹo :)
true
hoạt động, theo câu trả lời của Jack T. Có sự thay đổi hành vi trong các phiên bản gần đây?
false
sẽ hoạt động, vì ý tưởng là lấy sự tập trung ra khỏi các hộp EditText.
Cố gắng khai báo nó trong tập tin kinh nguyệt
<activity android:name=".HomeActivity"
android:label="@string/app_name"
android:windowSoftInputMode="stateAlwaysHidden"
>
Chỉ cần thêm vào AndroidManifest.xml
<activity android:name=".HomeActivity" android:windowSoftInputMode="stateHidden">
</activity>
Bạn cũng có thể viết các dòng mã này trong bố trí cha mẹ trực tiếp của tệp bố cục .xml mà bạn có "vấn đề":
android:focusable="true"
android:focusableInTouchMode="true"
Ví dụ:
<?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>
BIÊN TẬP :
Ví dụ nếu EditText được chứa trong bố cục khác:
<?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>
Điều quan trọng là đảm bảo rằng EditText không thể lấy nét trực tiếp.
Tạm biệt! ;-)
Giải pháp tốt nhất cho tôi, dán lớp của bạn
@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();
}
Chức năng ẩn bàn phím.
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);
}
}
Ẩn bàn phím trong tệp AndroidManifext.xml.
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme"
android:windowSoftInputMode="stateHidden">
Để mở rộng dựa trên câu trả lời được chấp nhận bởi @Lucas:
Gọi đây từ hoạt động của bạn trong một trong những sự kiện vòng đời đầu tiên:
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
override fun onResume() {
super.onResume()
window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN)
}
Bạn có thể thử thiết lập thuộc tính duy nhất này cho từng thành phần
TextView mtextView = findViewById(R.id.myTextView);
mtextView.setShowSoftInputOnFocus(false);
Bàn phím sẽ không hiển thị trong khi yếu tố là trọng tâm
//to hide the soft keyboard
InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
chỉ cần thêm điều này vào Hoạt động của bạn:
@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" ...>