问题
I'm having trouble with the on screen keyboard. I have an activity with an EditText
which shows the keyboard, and a button to go to a second activity. The second activity shows a ProgressDialog
on its onCreate()
, does stuff, and dismisses the ProgressDialog
. The problem is that while the ProgressDialog
is displayed, so is the keyboard.
I would like the keyboard to disappear before creating the ProgressDialog
. I searched thorougly both StackOverflow and other sites, but nothing seems to work with this particular scenario.
I'm attaching two pics for your reference:
This is the code of the first activity:
public class FirstActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
findViewById(R.id.button1).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
startActivity(intent);
}
});
}
}
and this is the code of the second activity:
public class SecondActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.second);
// TODO: hide keyboard here
final ProgressDialog dialog = ProgressDialog.show(this, "", "Please wait...", true, false, null);
// in real code, here there is an AsyncTask doing stuff...
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
dialog.dismiss();
}
}, 5000);
}
}
Thanks
回答1:
Solved using a variation of the technique posted by phalt:
InputMethodManager im = (InputMethodManager) this.getApplicationContext().getSystemService(Context.INPUT_METHOD_SERVICE);
im.hideSoftInputFromWindow(getWindow().getDecorView().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
This code works correctly during onCreate
/onStart
/onResume
, since doesn't rely on a focused view to get the window token from.
回答2:
Write this code in manifest.xml file for 'SecondActivity' Activity.
<activity name="EditContactActivity"
android:windowSoftInputMode="stateAlwaysHidden">
...
</activity>
回答3:
you can use like this also:
InputMethodManager imm;
Write below line in onCreate() Method:
imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
And this line is in onclick of button:
imm.hideSoftInputFromWindow(arg0.getWindowToken(), 0);
Example:
public class FirstActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
findViewById(R.id.button1).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
imm.hideSoftInputFromWindow(arg0.getWindowToken(), 0);
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
startActivity(intent);
}
});
}
}
回答4:
If In Fragment Class
@Override
public void onResume()
{
getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
super.onResume();
}
If In Activity Class
@Override
public void onResume()
{
this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
super.onResume();
FetchLocation fl = new FetchLocation(mContext, locationResult);
}
回答5:
Have you tried:
InputMethodManager im = (InputMethodManager)
this.getApplicationContext().getSystemService(Context.INPUT_METHOD_SERVICE);
im.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(),
InputManagerMethod.HIDE_NOT_ALWAYS);
This is the code I throw in at points I want to hide the keyboard.
来源:https://stackoverflow.com/questions/10429125/hiding-keyboard-after-calling-new-activity-that-shows-a-progressdialog