我在Android中有一个活动,包含两个元素:

编辑文本列表视图

当“活动”启动时,EditText立即具有输入焦点(闪烁光标)。我不希望任何控件在启动时具有输入焦点。我尝试了:

EditText.setSelected(false);
EditText.setFocusable(false);

没有运气。如何说服EditText在“活动”启动时不选择自己?


当前回答

隐藏键盘的最简单方法是使用setSoftInputMode

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

或者可以使用InputMethodManager并像这样隐藏键盘。

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);

其他回答

迟到了,但可能会有所帮助。在布局顶部创建一个虚拟的EditText,然后在onCreate()中调用myDummyEditText.requestFocus()

<EditText android:id="@+id/dummyEditTextFocus" 
android:layout_width="0px"
android:layout_height="0px" />

这似乎和我预期的一样。无需处理配置更改等。我需要这一点用于具有冗长文本视图(说明)的“活动”。

/** 
 * set focus to top level window
 * disposes descendant focus 
 * disposes softInput 
 * */
public static void topLevelFocus(Context context){
    if(Activity.class.isAssignableFrom(context.getClass())){
        ViewGroup tlView = (ViewGroup) ((Activity) context).getWindow().getDecorView();
        if(tlView!=null){
            tlView.setFocusable(true);
            tlView.setFocusableInTouchMode(true);
            tlView.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);
        }
    }
}
View current = getCurrentFocus();

if (current != null) 
    current.clearFocus();

您可以将Editext设置为禁用焦点属性,现在这可以通过两种方式应用:

您可以禁用focusable作为常规属性或者您可以禁用FocusableInTouchMode作为触摸模式(触摸屏)中该视图的特定属性

默认情况下,如果Editext位于该活动中视图堆栈的顶部(例如,标头),则focusable属性为true,那么它将在活动启动时可聚焦。

要禁用Focusable,只需将其布尔值设置为false即可。

因此,这将是:

android:focusable="false"

要禁用FocusableInTouchMode,只需将其布尔值设置为false即可。因此,这将是:

android:focusable="false"

您只需找到要应用更改的Textview,然后将相应的代码片段添加到xml文件中的xml规范中。

或者,您可以单击布局编辑器中的Textview,找到显示该Textview所有xml属性的侧边栏,然后简单地向下滚动到声明“Focusable”和“FocusableInTouchMode”的位置,并检查它们是否为true或false。

请尝试clearFocus()而不是setSelected(false)。Android中的每个视图都具有可聚焦性和可选择性,我认为您只需要清除焦点。