diff --git a/flow/ui/android/navigation.rb b/flow/ui/android/navigation.rb index a9c7fac..679a836 100644 --- a/flow/ui/android/navigation.rb +++ b/flow/ui/android/navigation.rb @@ -1,6 +1,23 @@ class UI::Navigation attr_reader :root_screen + #In pixels + def self.bar_height + @bar_height ||= begin + value = Android::Util::TypedValue.new + if UI.context.theme.resolveAttribute(Android::R::Attr::ActionBarSize, value, true) + Android::Util::TypedValue.complexToDimensionPixelSize(value.data, UI::context.resources.displayMetrics) + else + resource_id = UI.context.resources.getIdentifier('action_bar_default_height', 'dimen', 'android') + if resource_id + UI.context.resources.getDimensionPixelSize(resource_id) + else + 0 + end + end + end + end + def initialize(root_screen) @root_screen = root_screen @root_screen.navigation = self @@ -16,9 +33,11 @@ def hide_bar if bar.isShowing bar.hide Task.after 0.05 do - screen = @current_screens.last - screen.view.height += (bar.height / UI.density) - screen.view.update_layout + bar_height = bar.height>0 ? bar.height : self.class.bar_height + @current_screens.each do |e| + e.view.height += (bar_height / UI.density) + e.view.update_layout + end end end end @@ -28,9 +47,11 @@ def show_bar if !bar.isShowing bar.show Task.after 0.05 do - screen = @current_screens.last - screen.view.height -= (bar.height / UI.density) - screen.view.update_layout + bar_height = bar.height>0 ? bar.height : self.class.bar_height + @current_screens.each do |e| + e.view.height -= (bar_height / UI.density) + e.view.update_layout + end end end end diff --git a/flow/ui/android/screen.rb b/flow/ui/android/screen.rb index 126470c..3064d8e 100644 --- a/flow/ui/android/screen.rb +++ b/flow/ui/android/screen.rb @@ -109,6 +109,7 @@ def view if resource_id > 0 view_height -= UI.context.resources.getDimensionPixelSize(resource_id) end + view_height -= UI::Navigation.bar_height view.width = main_screen_metrics.width / UI.density view.height = view_height / UI.density