Это мой обходной путь ... в Деятельности, которая содержит 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);