1

我有一个 android 应用程序,我想在其中输入密码,如果正确,则转到新活动。为此,我显示了一个带有 EditText 字段的自定义对话框。如果密码正确,则隐藏 kayboard 并转到下一个活动。我使用以下代码隐藏键盘

    alertBuilder.setNeutralButton("OK",
        new DialogInterface.OnClickListener() {
        @Override
         public void onClick(DialogInterface dialog, int which) {
             InputMethodManager inputMethodManager = (InputMethodManager)getSystemService(Activity.INPUT_METHOD_SERVICE); inputMethodManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
         new Thread(new Runnable() {
         @Override
         public void run() {
              //start new acivity for result
         }
        }).start();

    }
});

并使用startActivityForResult(intent,requestCode)在对话框的 OK 按钮的 onClick 中的线程内加载下一个活动。但在加载下一个活动之前,隐藏键盘后,背景图像显示一个黑色底栏,如这个

当回到这个活动时,背景图像会像这样显示一会儿。我试过intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); 并在清单文件中为此活动设置android:windowSoftInputMode="adjustPan" 。它对我不起作用。这里有什么问题以及如何解决这个问题?

提前致谢

4

1 回答 1

0

关闭键盘后,等待一个可运行的小延迟,让 Activity 的背景有一点时间重新绘制。

使用 aHandler等待小延迟并返回 UI 线程。

将此添加到您的课程中

private Handler mHandler = new Handler();

定义一个 Runnable

private Runnable mRunnable = new Runnable() {
    public void run() {
        startActivityForResult(intent, resultCode);
    }
};

更新您的代码

alertBuilder.setNeutralButton("OK", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        InputMethodManager inputMethodManager = (InputMethodManager)getSystemService(Activity.INPUT_METHOD_SERVICE);
        inputMethodManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);

        // Wait a moment and jump to the next activity.
        mHandler.postDelayed(mRunnable, 500);
    }
});
于 2013-03-25T07:01:00.953 回答