У меня есть слушатель программной клавиатуры, который хорошо работает (за исключением одного занятия).Вот оно.
public static void setKeyboardListener(final Activity activity, final ImageView iv_header){
final View view =activity.findViewById(android.R.id.content);
view.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout(){
//get cached screen height
String s_heightRoot =StringCacheFactory.stringCache.get("screen_height");
int heightRoot = (s_heightRoot ==null) ? 0 : FormatFactory.tryParseStringToInt(s_heightRoot);
//get height when onGlobalLayout is called
Rect measureNewRect = new Rect();
view.getWindowVisibleDisplayFrame(measureNewRect);
int heightNew =measureNewRect.bottom;
if ((heightNew < heightRoot) || (heightRoot ==0)){
//screen has shrunk, keyboard open, perform awesome code
view.getViewTreeObserver().removeOnGlobalLayoutListener(this);
}else{
//full screen, do nothing
view.getViewTreeObserver().removeOnGlobalLayoutListener(this);
}
}
});
}
Для всех действий слушатель ожидает изменения экрана, а затем вызывает onGlobalLayout ().Но одно действие onGlobalLayout () вызывается немедленно (без смены экрана).Это действие является уникальным в том смысле, что оно подразумевает следующее:
public class PlacesActivity extends AppCompatActivity implements
GoogleApiClient.OnConnectionFailedListener,
GoogleApiClient.ConnectionCallbacks {
//lotsa code
}
PlacesActivity
имеет AutoCompleteTextView
, где пользователь выбирает город по всему миру с помощью API Google Адресов.Эти обратные вызовы мешают моему onGlobalLayoutListener
?
Любые другие ситуации, когда onGLobalLayout()
может быть вызван без видимого изменения макета?
AutoCompleteTextView
вызывает onGlobalLayout()
?