2012-08-04 113 views
0

我浏览过类似的问题,并按照上面的建议,但对于上帝的爱,我无法得到这个工作,这让我疯狂。所以这里的交易:在程序启动时没有显示软键盘

我有一个editText,需要requestFocus在程序启动,并弹出软键盘。如果我在Manifest中放置了“android:windowSoftInputMode =”stateVisible“,那么每次活动开始时都会显示keboard,我只希望它用onCreate()显示一次,并且当用户专门点击editText时。低于:

EditText argument; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_radio_buttons); 

    argument = (EditText) findViewById(R.id.editText_argument); 
    InputMethodManager imm = InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
    imm.showSoftInput(argument, InputMethodManager.SHOW_FORCED); 

Q1)这个代码不工作我在做什么错

Q2)你看,我宣布 “的EditText参数” 的onCreate(外),因为我? 'd喜欢在其余的活动中使用它,而不仅仅是在onCreate()中。这是不错的编程练习吗?

Q3)然后,当用户在软键盘上点击完成时,我希望EditText失去焦点,即光标应该消失。我知道我需要有一个虚拟视图来做到这一点,但我仍然不完全明白如何将焦点转换到虚拟视图。我会怎么做呢?

非常感谢!

回答

1

A1)您错过了editText.requestFocus()

请参阅:Soft Keyboard shows up on EditText focus ONLY once应该有助于解除软键盘。

A2)是的,没关系。大多数UI元素应该在类级范围内声明并初始化为onCreate()

A3)A1的引用链接可以帮助您。

快乐编码!

编辑:

的onCreate():


EditText argument; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_radio_buttons); 
    argument = (EditText) findViewById(R.id.editText_argument); 

showKeyboard():


argument.requestFocus(); 
argument.postDelayed(new Runnable() { 
    @Override 
    public void run() { 
     InputMethodManager keyboard = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
     keyboard.showSoftInput(argument, 0); 
    } 
},200); 

dismissKeyboard():


argument.requestFocus(); 
argument.postDelayed(new Runnable() { 
    @Override 
    public void run() { 
     InputMethodManager keyboard = (InputMethodManager)     getSystemService(Context.INPUT_METHOD_SERVICE); 
    keyboard.hideSoftInputFromWindow(argument.getWindowToken(), 0); 
    } 
},200); 
+0

我试着添加'editText.requestFocus()',但它不起作用:( – cartonn 2012-08-04 15:07:38

+0

请参阅编辑代码片段。 – 2012-08-04 15:10:45

+0

我得到这个错误:“new Runnable(){}类型的run()方法必须重载超类方法”。我最终删除了“@Override”,现在它可以工作。什么是重写? – cartonn 2012-08-04 15:20:04