Del*_*ens 7 android android-edittext android-fragments
很抱歉再次询问此事的帮助,但所有其他帖子都没有帮助.
这是场景:我有一个Acivity('A'),它包含一个带有片段的Layout.此片段在用户输入上交换.其中一个片段里面有一个edittext,我想把重点放在创作上并显示该死的软键盘.所以,在我使用的片段的onCreateView()中:
mEt = (EditText) v.findViewById(R.id.et);
mEt.setImeOptions(EditorInfo.IME_ACTION_DONE);
mEt.requestFocus();
Run Code Online (Sandbox Code Playgroud)
因此,它第一次工作,但如果片段被替换并在以后重新创建,它会获得焦点,但键盘不会出现.
在片段被破坏之前我试图隐藏键盘:
InputMethodManager keyboard = (InputMethodManager)
ctx.getSystemService(Context.INPUT_METHOD_SERVICE);
keyboard.hideSoftInputFromWindow(et.getWindowToken(), 0);
Run Code Online (Sandbox Code Playgroud)
或通过以下方式明确显示键盘:
InputMethodManager keyboard = (InputMethodManager)
ctx.getSystemService(Context.INPUT_METHOD_SERVICE);
keyboard.showSoftInput(et, 0);
Run Code Online (Sandbox Code Playgroud)
但是(正如你可以想象我在这里发布的事实:)),问题仍然存在.
我也绝望地想到了一个活动/片段问题,并且在活动中使用与听众相同的技术,没有运气.
很沮丧,请帮忙:)
tsm*_*ith 16
我刚刚解决了这个问题.我们有一个活动,它将多个片段换成了需要焦点和键盘的文本字段.
有两种方法可以解决这个问题,我和他一起玩这两种方法.这是我最终采用的方法.
@Override
private View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
...
if (savedInstanceState != null && !savedInstanceState.isEmpty()){
msDialogMessage = savedInstanceState.getString(STATE_DAILOG_MSG);
} else{
Utils.setKeyboardFocus(mEditTextUserName);
}
...
}
/**
* Used to set focus and show keyboard (if needed) for a specified text field
* @author Ty Smith
* @param primaryTextField
*/
public static void setKeyboardFocus(final EditText primaryTextField) {
(new Handler()).postDelayed(new Runnable() {
public void run() {
primaryTextField.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN, 0, 0, 0));
primaryTextField.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_UP , 0, 0, 0));
}
}, 100);
}
Run Code Online (Sandbox Code Playgroud)
虽然如果你的片段不好玩且生命周期方法没有正确调用,你可能会考虑我的另一种方式.
我不会发布代码,只是将抓取焦点方法放在自定义侦听器中,并在将片段放到前面时从活动中调用它.
| 归档时间: |
|
| 查看次数: |
7212 次 |
| 最近记录: |