как убрать выдвижной ящик с верхней части виртуальной клавиатуры - PullRequest
5 голосов
/ 23 декабря 2010

Я весь день ломал голову над этим. на одном из моих действий (и только на одном), когда я вызываю виртуальную клавиатуру, над ней появляется выдвижная ручка ящика. мне удалось решить эту проблему на всех других действиях в моем приложении, поместив android: windowSoftInputMode = "AdjustPan" в каждое действие в моем файле Manafest.xml, включая рассматриваемое действие. также, насколько я был в состоянии определить, что ни один из объектов в действии не имеет фокуса (если я не могу выяснить, как его найти). я проверил фокус, используя this.getCurrentFocus (), а затем выполнил view.clearFocus () для возвращенного представления, если оно было. пока он не вернул представление, так что, насколько я могу судить, ничто не имеет фокуса.

есть идеи?

1 Ответ

0 голосов
/ 03 февраля 2012

Это мой обходной путь ... в Деятельности, которая содержит EditText, у меня есть подкласс, который расширяет EditText.В этом подклассе я переопределяю метод onMeasure(), который проверяет, открыта ли клавиатура.

    public static class MyEditText extends EditText {
            MyActivity context;

            public void setContext(MyActivity context) {
                this.context = context;
            }

            @Override
            protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
                int height = MeasureSpec.getSize(heightMeasureSpec);
                Activity activity = (Activity)getContext();
                Rect rect = new Rect();
                activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(rect);
                int statusBarHeight = rect.top;
                int screenHeight = activity.getWindowManager().getDefaultDisplay().getHeight();
                int diff = (screenHeight - statusBarHeight) - height;
                // assume all soft keyboards are at least 128 pixels high
                if (diff>128)
                     context.showHandle(false);
                else
                     context.showHandle(true);

                super.onMeasure(widthMeasureSpec, heightMeasureSpec);
            }
    }

Затем в упражнении, если клавиатура открыта, ручка выдвижного ящика устанавливается на прозрачный 1px x 1pxНа изображении, если клавиатура скрыта, отображается реальная ручка:

private void showHandle(boolean show) {
    ImageView drawer_handle = (ImageView) findViewById(R.drawable.handle);
    if (show)
            drawer_handle.setImageResource(R.drawable.handle);
    else
            drawer_handle.setImageResource(R.drawable.handle_blank);
}

Наконец, убедитесь, что вы набрали setContext() в onCreate() из MyActivity

MyEditText met = (MyEditText) findViewById(R.id.edit_text);
met.setContext(this);
...