好的,大家都知道要隐藏你需要实现的键盘:
InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
Run Code Online (Sandbox Code Playgroud)
但这里最重要的是当用户触摸或选择任何其他不是EditText软键盘或软键盘的地方时如何隐藏键盘?
我试图onTouchEvent()在我的父母Activity身上使用,但这只有在用户触摸任何其他视图以外且没有滚动视图时才有效.
我尝试实现触摸,单击,集中监听器而没有任何成功.
我甚至尝试实现自己的scrollview来拦截触摸事件,但我只能获取事件的坐标而不是点击的视图.
有没有一种标准的方法来做到这一点?在iPhone中它真的很容易.
我想在用户完成编辑EditText时捕获一个事件.
怎么做到呢?
当我们有一个EditText并且它失去焦点(对于不需要键盘的元素)时,软键盘应该自动隐藏还是我们应该自己隐藏它?
我正在将焦点从AutoCompleteSearchView(EditText我的行为应该像我猜的那样)移动到a Button,requestFocus()返回true,但键盘不会隐藏.
我只想在"edittext"外单击时自动失去焦点并隐藏键盘.目前,如果我点击"edittext"它会聚焦,但我需要点击后退按钮来取消聚焦.
我在顶部EditText有一个搜索框(ListView),下面有一个ListView.每当活动开始时,EditText始终具有焦点并调出部分覆盖的键盘clearFocus().
没有别的onCreateView可以集中精力.我希望EditText只在用户触摸并开始输入时才有焦点.我尝试将clearFocus()放入onViewCreated,onCreated或者EditText,但没有运气.
我用xamarin + mvvmcross创建了android应用程序.我的MvxFragment中有一个MvxAutoCompleteTextView.在MvxAutoCompleteTextView中写入并单击其他控件后,我想隐藏虚拟键盘.我用这个代码
public class MyFragment : MvxFragment
{
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
base.OnCreateView(inflater, container, savedInstanceState);
var view = this.BindingInflate(Resource.Layout.frMy, null);
var autoComplete = view.FindViewById<MvxAutoCompleteTextView>(Resource.Id.acMy);
InputMethodManager inputManager = (InputMethodManager)inflater.Context.GetSystemService(Context.InputMethodService);
inputManager.HideSoftInputFromWindow(autoComplete.WindowToken, HideSoftInputFlags.None);
return view;
}
}
Run Code Online (Sandbox Code Playgroud)
但这不行.如何隐藏键盘?
我有一个包含EditText的片段用于输入,但现在我想在用户点击EditText之外的屏幕时关闭键盘.
我知道如何在一个活动中做到这一点,但对于片段来说似乎有所不同.
我在view.onTouchListener上调用此方法
public static void hideSoftKeyboard() {
InputMethodManager inputMethodManager = (InputMethodManager) getActivity().getSystemService(Activity.INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow(getActivity().getCurrentFocus().getWindowToken(), 0);
}
Run Code Online (Sandbox Code Playgroud)
有人有解决方案,谢谢
在视图上,我有一个 LinearLayout,当我单击下面的 EditText 时,我想折叠它,然后在我们取消焦点时展开它。
<EditText
android:layout_width="1000dp"
android:layout_height="43dp"
android:layout_centerVertical="true"
android:textSize="14.4sp"
android:gravity="center_vertical"
android:hint="@string/hint_query"
android:layout_toEndOf="@+id/searchImage"
android:id="@+id/searchBoxText"
android:background="@null"
android:layout_marginStart="16dp"
android:inputType="text"
tools:ignore="Autofill" />
Run Code Online (Sandbox Code Playgroud)
感谢 Android-Annotations,我实现了一个 onFocusChangeListener。
@FocusChange
void searchBoxText(EditText searchBoxText) {
Log.d("change focus", "focus has changed with " + searchBoxText.hasFocus());
if (!searchBoxText.hasFocus()) {
if(upperView != null)
upperView.setVisibility(View.VISIBLE);
} else {
if(upperView != null)
upperView.setVisibility(View.GONE);
}
}
Run Code Online (Sandbox Code Playgroud)
我在父级上有一个 touchListener ,它抛出:
searchBoxText.clearFocus();
Run Code Online (Sandbox Code Playgroud)
当我们点击 EditText 之外的时候。
平板电脑我的目标是将此代码支持为最大 API 24。我的问题是此代码在 API 28 中完美运行,但在 API 24 上运行不佳,它会抛出 onFocusChange 两次,而且我没有找到任何原因来说明为什么这样做或任何让它发挥作用的方法。
我需要截取应用程序中的所有触摸事件以监视自定义活动超时.
目前我dispatchTouchEvent()在我的活动中使用,但如果我在屏幕上有一个对话框,则不会调用它.有没有人知道我是否有任何方法可以在存在对话框的情况下使用相同的功能?
谢谢