private static boolean showCheatSheet ( View view , CharSequence text ) { if ( TextUtils . isEmpty ( text ) ) { return false ; } final int [ ] screenPos = new int [ 2 ] ; // origin is device display final Rect displayFrame = new Rect ( ) ; // includes decorations (e.g. status bar) view . getLocationOnScreen ( screenPos ) ; view . getWindowVisibleDisplayFrame ( displayFrame ) ; final Context context = view . getContext ( ) ; final int viewWidth = view . getWidth ( ) ; final int viewHeight = view . getHeight ( ) ; final int viewCenterX = screenPos [ 0 ] + ( viewWidth / 2 ) ; final int screenWidth = context . getResources ( ) . getDisplayMetrics ( ) . widthPixels ; final int estimatedToastHeight = ( int ) ( ESTIMATED_TOAST_HEIGHT_DPS * context . getResources ( ) . getDisplayMetrics ( ) . density ) ; Toast cheatSheet = Toast . makeText ( context , text , Toast . LENGTH_SHORT ) ; boolean showBelow = screenPos [ 1 ] < estimatedToastHeight ; if ( showBelow ) { // Show below // Offsets are after decorations (e.g. status bar) are factored in cheatSheet . setGravity ( Gravity . TOP | Gravity . CENTER_HORIZONTAL , viewCenterX - ( screenWidth / 2 ) , ( screenPos [ 1 ] - displayFrame . top ) + viewHeight ) ; } else { // Show above // Offsets are after decorations (e.g. status bar) are factored in cheatSheet . setGravity ( Gravity . BOTTOM | Gravity . CENTER_HORIZONTAL , viewCenterX - ( screenWidth / 2 ) , displayFrame . bottom - screenPos [ 1 ] ) ; } cheatSheet . show ( ) ; return true ; }
Internal helper method to show the cheat sheet toast .