可能重复:
关闭/隐藏Android软键盘
首先,我已经看到了该线程。我尝试了那里给出的可接受的方法。但是对我没有任何帮助。
我的应用程序中有两个屏幕。
在我的第一个屏幕中,我希望用户名EditText专注于启动,并且Keyboard应该可见。这是我的实现(通过删除不必要的/不相关的代码进行简化)。
<LinearLayout android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingLeft="20dip"
android:paddingRight="20dip">
<EditText android:id="@+id/username"
android:singleLine="true"
android:layout_width="fill_parent"
android:layout_height="wrap_content" android:hint="Username"
android:imeOptions="actionDone" android:inputType="text"
android:maxLines="1"/>
<EditText android:id="@+id/password"
android:password="true"
android:singleLine="true"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="Password" />
</LinearLayout>
class AppLogin extends Activity{
private EditText mUserNameEdit = null;
private EditText mPasswordEdit = null;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.app_login);
mUserNameEdit = (EditText) findViewById(R.id.username);
mPasswordEdit = (EditText) findViewById(R.id.password);
/* code to show keyboard on startup.this code is not working.*/
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(mUserNameEdit, InputMethodManager.SHOW_IMPLICIT);
}//End of onCreate()
}
好吧,启动时键盘没有显示。而且我的设计非常需要键盘。
现在到第二页 .. 我已经说过那里有listView和EditText。我希望我的键盘在启动时隐藏,只在用户触摸editText时才显示。.你相信吗?加载活动时,无论我尝试过的软键盘如何显示,都无法将其隐藏。
<LinearLayout android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<EditText android:id="@+id/filter_edittext"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="Search" android:inputType="text"
android:maxLines="1"/>
<ListView android:id="@id/android:list"
android:layout_height="fill_parent"
android:layout_weight="1.0"
android:layout_width="fill_parent"
android:focusable="true"
android:descendantFocusability="beforeDescendants"/>
</LinearLayout>
public class MyListActivity extends ListActivity{
private EditText mfilterEditText;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.app_list_view);
mFilterEditText = (EditText) findViewById(R.id.filter_edittext);
InputMethodManager imm = InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(mFilterEditText.getWindowToken(), 0);
}
}
为了简化
我的问题是我在两种情况下都截然相反 ...希望有人以前遇到过这个问题。顺便说一句,我正在模拟器和HTC Desire手机上进行测试。
好吧,在这里所有朋友的帮助下,我开始工作了。
1.在启动时显示键盘
有两个答案对我有用。@CapDroid提供的一个,它使用处理程序并将其延迟发布。
mUserNameEdit.postDelayed(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
InputMethodManager keyboard = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
keyboard.showSoftInput(mUserNameEdit, 0);
}
},50);
@Dyarish提供了第二个答案,实际上,他链接到另一个SO线程,我之前从未见过。但是有趣的是,这个解决方案是在我一开始所引用的线程中给出的。而且我还没有尝试过,因为在所有其他帖子都获得了很多票的线程中,它的票数为零。
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
对我来说,第二个解决方案看起来很整洁,所以我决定坚持下去。但是第一个解决方案肯定有效。此外,@ Dyarish的答案包含一个巧妙的技巧,即在EditText下使用ScrollView来赋予EditText焦点。.但是我没有尝试过,但是应该可以。不整洁..
2.在活动开始时隐藏键盘
@Dyarish提供的只有一个答案对我有用。解决方案是将xml中的focusableInTouchMode设置用于包含editText的布局。这成功了
<LinearLayout android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:focusableInTouchMode="true">
<EditText android:id="@+id/filter_edittext"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="Search" android:inputType="text"
android:maxLines="1"/>
<ListView android:id="@id/android:list"
android:layout_height="fill_parent"
android:layout_weight="1.0"
android:layout_width="fill_parent"
android:focusable="true"
android:descendantFocusability="beforeDescendants"/>
</LinearLayout>
无论如何,我最终在两种情况下都使用了Dyarish的答案。因此,我向他颁发了赏金。感谢所有尝试帮助我的朋友。
将此代码添加到您的代码android:focusableInTouchMode="true"
中将确保您的键盘在启动时不会出现在您的edittext框中。您想将此行添加到包含EditTextBox的线性布局中。您应该可以解决这个问题。我已经测试过了。简单的解决方案。
即:在您的app_list_view.xml文件中
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:focusableInTouchMode="true">
<EditText
android:id="@+id/filter_edittext"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="Search"
android:inputType="text"
android:maxLines="1"/>
<ListView
android:id="@id/android:list"
android:layout_height="fill_parent"
android:layout_weight="1.0"
android:layout_width="fill_parent"
android:focusable="true"
android:descendantFocusability="beforeDescendants"/>
</LinearLayout>
------------------ 编辑:使键盘在启动时出现 -----------------------
这是为了使它们的键盘在启动时出现在用户名edittextbox上。我所做的只是在.xml文件的底部添加了一个空的Scrollview,这将第一个edittext置于焦点并弹出了键盘。我承认这是一个hack,但是我假设您只是想这样做。我已经对其进行了测试,并且效果很好。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingLeft="20dip"
android:paddingRight="20dip">
<EditText
android:id="@+id/userName"
android:singleLine="true"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="Username"
android:imeOptions="actionDone"
android:inputType="text"
android:maxLines="1"
/>
<EditText
android:id="@+id/password"
android:password="true"
android:singleLine="true"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="Password" />
<ScrollView
android:id="@+id/ScrollView01"
android:layout_height="fill_parent"
android:layout_width="fill_parent">
</ScrollView>
</LinearLayout>
如果您正在寻找更雄辩的解决方案,那么我发现此问题可能会对您有所帮助,它不像上面的解决方案那么简单,但可能是更好的解决方案。我没有测试过,但显然可以。我认为这与您尝试过的解决方案相似,但对您却不起作用。
希望这是您想要的。
干杯!
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句