2016-11-29 62 views
0

我正在使用自定義TabbedRenderer動態隱藏和顯示Android上的ActionBar中的選項卡。在橫向方向上,我隱藏了標籤,因爲我可以將補充內容並排放置。縱向顯示標籤,以便用戶可以單擊該標籤查看補充內容。渲染器通過改變動作條NavigationMode如下實現隱藏和顯示:Xamarin ActionBar隱藏顯示選項卡問題

void HideShowTabs() 
{ 
    var actionBar = ((Activity)Context).ActionBar; 

    if ((Element as MyTabbedPage).IsTabBarVisible) 
    { 
     if (actionBar.NavigationMode != ActionBarNavigationMode.Tabs) 
      actionBar.NavigationMode = ActionBarNavigationMode.Tabs; 
    } 
    else if (actionBar.NavigationMode == ActionBarNavigationMode.Tabs) 
     actionBar.NavigationMode = ActionBarNavigationMode.Standard; 

} 

的問題是,當我切換從NavigationMode = StandardNavigationMode = Tabs凸片現在覆蓋的標題在主導航欄如下。

啓動人像(良好): enter image description here

然後景觀(良好): enter image description here

然後回到人像(壞): enter image description here

謝謝你的任何建議,就如何正確。

回答

1

原來我的問題是時機問題。我正在觸發Xamarin Forms TabbedPage派生類(Element)的SizeChanged事件中的hide/show。該事件評估屏幕方向並根據結果設置IsTabBarVisible屬性。

TabbedRenderer訂閱了元素的PropertyChanged事件,觀察對IsTabBarVisible屬性的更改。在IsTabBarVisible屬性中檢測到更改時,上面的HideShowTabs()方法在渲染器中被調用。

當我在渲染器中保留所有邏輯時,問題就消失了。重寫OnConfigurationChanged,我使用原始HideShowTabs()方法中的相同邏輯來檢查方向更改並相應地隱藏/顯示選項卡。

雖然這使得渲染器不夠靈活,但它現在解決了我的問題。我將不得不追蹤更好的方式來定時導航模式更改,以便正確渲染。無論如何,如果我正在處理這種錯誤的方式,請接受建議。謝謝。

protected override void OnConfigurationChanged(Configuration newConfig) 
    { 
     var actionBar = ((Activity)Context).ActionBar; 

     if (Android.Content.Res.Orientation.Landscape == Resources.Configuration.Orientation) 
     { 
      if (actionBar.NavigationMode == ActionBarNavigationMode.Tabs) 
      { 
       actionBar.NavigationMode = ActionBarNavigationMode.Standard; 
      } 
     } 
     else 
     { 
      if (actionBar.NavigationMode != ActionBarNavigationMode.Tabs) 
      { 
       actionBar.NavigationMode = ActionBarNavigationMode.Tabs; 
      } 
     } 

     base.OnConfigurationChanged(newConfig); 
    }