5

大家好,我是 Android 新手,并且在我的项目中遇到了非常愚蠢的问题,我有一个 EditText,只要用户触摸 EditText 软键盘,就会在列表视图的标题视图中定义。我有一个叫做清除按钮的东西,它清除了 EditText 清除软键盘后没有显示在 2.3 设备中。每当我按下锁定/电源按钮锁定设备并解锁时,软键盘就会显示

<activity
        android:name=".pl.Mobile.AddJobNew"
        android:configChanges="orientation|keyboardHidden"
        android:screenOrientation="landscape"
        android:windowSoftInputMode="stateVisible|adjustResize|adjustPan"
         >

这是我在 Android 中针对 android:windowSoftInputMode 的活动声明:“adjustResize”选项适用于 Android 2.3 设备,但在软键盘与编辑文本重叠的 4.0 设备中失败。选项“adjustPan”在 4.0 设备中运行良好,但在 2.3 设备中失败

请帮助我摆脱这个问题。

提前致谢

4

4 回答 4

5

在带有编辑文本的活动中尝试此操作:

int currentapiVersion = android.os.Build.VERSION.SDK_INT;
if (currentapiVersion >= android.os.Build.VERSION_CODES.ICE_CREAM_SANDWICH){
// Do something for 4.0 and above versions
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
} 
else{
// do something for phones running an SDK before 4.0
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
}

同时删除,

android:windowSoftInputMode="stateVisible|adjustResize|adjustPan"

来自清单文件中的活动。

构建版本

于 2013-01-20T13:39:35.770 回答
2

我认为问题在于,当您单击清除按钮时,editText 会失去焦点,因此键盘会自行隐藏。

我会尝试两件事来解决它;

  1. 清理文本后,请执行以下操作:

    yourEditTextField.requestFocus()

  2. 手动控制键盘可见性:

    public void showKeyboard(){ 查看视图 = getWindow().getCurrentFocus(); 如果(视图==空)返回;

    InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.showSoftInput(view, InputMethodManager.SHOW_FORCED);
    

    }

    public void hideKeyboard(){ 查看视图 = getWindow().getCurrentFocus(); 如果(视图==空)返回;

    IBinder binder = view.getWindowToken();
    if (binder == null)
        return;
    
     // prevent a bug in some keyboards that makes the text hang on the screen
    if (view instanceof EditText) 
        ((EditText)view).setText(((EditText)view).getText().toString());
    
    
    InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(binder, InputMethodManager.HIDE_NOT_ALWAYS);
    

    }

于 2013-01-22T08:03:33.613 回答
1

尝试类似的东西

    editext1.setOnTouchListener(new OnTouchListener()
            {

                public boolean onTouch(View v, MotionEvent event)
                {
                    if (v instanceof EditText)
                    {
                        InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                        imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
                        v.requestFocusFromTouch();
                        return true;
                    }
                    return false;
                }
            });

如果它不适合您尝试添加

        editext1.setOnFocusChangeListener(new OnFocusChangeListener()
        {

            public void onFocusChange(View v, boolean hasFocus)
            {
                InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
            }
        });

从布局中删除请求焦点也很好。并且可能在活动清单中设置这个android:windowSoftInputMode="stateHidden|stateAlwaysHidden"

于 2013-01-23T20:53:43.497 回答
1

我的 AndroidManifest.xml 文件中有以下行,效果很好。请尝试此代码。不要放任何额外的代码。如果你没有取得任何成功,请告诉我。我愿意帮助你。

<activity android:name=".pl.Mobile.AddJobNew" android:screenOrientation="portrait" android:configChanges="keyboard|orientation" android:windowSoftInputMode="adjustPan"/>

尝试使用上述代码进行您的活动。

于 2013-01-21T04:50:22.827 回答