android开发分享自动popup键盘启动Activity

我有一个相对简单的问题。 我有一个有很多EditText的活动。 当我打开该活动时,它会自动聚焦到第一个EditText并显示虚拟键盘。

我怎样才能防止这个?

    在XML文件的layout标签中使用这个属性:

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

    正如其他成员在注释中所报告的那样,它在ScrollView上不起作用,因此您需要将这些属性添加到ScrollView

    您可以将其添加到您的Android Manifest活动中:

     android:windowSoftInputMode="stateHidden|adjustResize" 

    我在这里有几个实现,但现在我已经添加到AndroidManifest.xml为我的Activity的属性:

     android:windowSoftInputMode="stateAlwaysHidden" 

    即使你正在使用fragments我认为这是简单的方法。

    stateAlwaysHidden ”当活动的主窗口具有input焦点时,软键盘始终处于隐藏状态。

    如果你有像ListView一样的活动的另一个视图,你也可以这样做:

     ListView.requestFocus(); 

    在你的onResume()从editText抓取焦点。

    我知道这个问题已经回答,但只是提供了替代解决scheme,为我工作:)

    ;

     @Override public void onCreate(Bundle savedInstanceState) { getWindow().setSoftInputMode( WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); } 

    但它应该是SOFT_INPUT_STATE_HIDDEN而不是SOFT_INPUT_STATE_ALWAYS_VISIBLE

    在你的Activity的代码中使用这个:

     @Override public void onCreate(Bundle savedInstanceState) { getWindow().setSoftInputMode( WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); } 

    我有一个类似的问题,即使在切换标签时,键盘自动popup并停留在Android 3.2.1平​​板电脑上。 使用以下方法:

     public void setEditTextFocus(EditText searchEditText, boolean isFocused) { searchEditText.setCursorVisible(isFocused); searchEditText.setFocusable(isFocused); searchEditText.setFocusableInTouchMode(isFocused); if (isFocused) { searchEditText.requestFocus(); } else { InputMethodManager inputManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); inputManager.hideSoftInputFromWindow(searchEditText.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS ); } } 

    在每个EditText的activity的onCreate()和onPause()中:

    setEditTextFocus(myEditText,false);

    对于每个EditText和一个OnTouchListener:

      myEditText.setOnTouchListener(new EditText.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { setEditTextFocus(myEditText, true); return false; } }); 

    对于OnEditorActionListener每个EditText

      myEditText.setOnEditorActionListener(new EditText.OnEditorActionListener() { @Override public boolean onEditorAction(TextView arg0, int arg1, KeyEvent arg2) { ....... setEditTextFocus(myEditText, false); return false; } }); 

    对于layout xml中的每个EditText

      android:imeOptions="actionDone" android:inputType="numberDecimal|numberSigned" // Or something else 

    可能有更多的代码优化可能。

    我发现这个简单的解决scheme,为我工作。设置这些属性在你的父级布局:

     <RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android" android:id="@+id/mainLayout" android:descendantFocusability="beforeDescendants" android:focusableInTouchMode="true" > 

    而现在,当活动开始时,这个主布局将默认为焦点。

    另外,我们可以在运行时通过重点关注主布局来移除焦点,如下所示:

     findViewById(R.id.mainLayout).requestFocus(); 

    希望它能为你工作。

    这是我使用的解决scheme,不是最好的解决scheme,但它对我来说很好

      editComment.setFocusableInTouchMode(false); editComment.setOnTouchListener(new OnTouchListener(){ @Override public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub editComment.setFocusableInTouchMode(true); editComment.requestFocus() ; return false; }}); 

    有趣的是,这个文档;

    在我的三星Galaxy S5,这是我的应用程序(没有清单条目或特定的代码)如何工作 – 没有软键盘。 然而,在一个棒棒糖AVD,一个软键盘显示 – 违反了上述文件。

    如果在AVD中进行testing时出现这种情况,您可能需要在真实的设备上进行testing以了解所发生的情况。

     ((InputMethodManager)getActivity().getSystemService("input_method")).hideSoftInputFromWindow(this.edittxt.getWindowToken(), 0); 

    在下面的文章中有一些很好的答案: 停止EditText在Activity启动时获得焦点 。 我经常使用的是Morgan的以下代码:

     <!-- Dummy item to prevent AutoCompleteTextView from receiving focus --> <LinearLayout android:focusable="true" android:focusableInTouchMode="true" android:layout_width="0px" android:layout_height="0px"/> <!-- :nextFocusUp and :nextFocusLeft have been set to the id of this component to prevent the dummy from receiving focus again --> <AutoCompleteTextView android:id="@+id/autotext" android:layout_width="fill_parent" android:layout_height="wrap_content" android:nextFocusUp="@id/autotext" android:nextFocusLeft="@id/autotext"/> 

    注意:虚拟物品必须放置在可聚焦元素之前。

    而且我认为即使使用ScrollView它也应该可以正常工作,而且对于这个function也没有什么问题。

    这发生在您的EditText自动获取焦点时,因为您的活动开始。 所以一个简单而稳定的方法来解决这个问题,就是把初始焦点设置成任何其他的视图,比如一个Button等等。

    你可以在你的布局XML中做到这一点,不需要代码

    接受的答案不适合我,这就是为什么给答案工作的解决scheme,可能是有帮助的!

     EditText edt = (EditText) findViewById(R.id.edt); edt.requestFocus(); edt.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN , 0, 0, 0)); edt.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_UP , 0, 0, 0)); 

    现在键盘是开放的享受:)

    如果你的视图有EditText和Listview,那么Keyboard会默认打开。 要隐藏键盘popup默认情况下执行以下操作

     this.listView.requestFocus(); 

    确保您在获取editText的查看后请求关注listview。

    例如

     this.listView = (ListView) this.findViewById(R.id.list); this.editTextSearch = (EditText) this.findViewById(R.id.editTextSearch); this.listView.requestFocus(); 

    如果你这样做,那么editText将获得焦点和键盘将popup。

      以上就是android开发分享自动popup键盘启动Activity相关内容,想了解更多android开发(异常处理)及android游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/addevelopment/516631.html

      (0)
      上一篇 2020年12月3日
      下一篇 2020年12月3日

      精彩推荐