2017-08-03 62 views
2

我想制作一个带有7个内容页面的标签页面(在xamarin表单中,不在本地项目中)。但红色的菜单栏(我不知道这个东西是什么,所以我称之为菜单栏)不是一个滚动菜单,所以每个内容页面的标题都没有很好地显示出来。就像这样:如何使用Xamarin表单中的滚动菜单制作多个内容页面的选项卡式页面?

,我其实有
the thing that I actually have

有人知道做这样的事情?

件事,我希望它是
thing that I want it to be

没有看到一些代码

回答

3

嘛不能多说! - 但我的假设是,你的问题是你的主题...

打开你的 'Tabbar.axml',改变这一行代码:

app:tabMode="fixed" 

要:

app:tabMode="scrollable" 

UPDATE:

那么简单,因为在默认情况下添加新行app:tabMode="scrollable"是“固定”

不管怎么说,你要求的,这里是我Tabbar.axml:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.TabLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/sliding_tabs" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="?attr/colorPrimaryDark" 
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
    app:tabIndicatorColor="@android:color/white" 
    app:tabGravity="fill" 
    app:tabMode="scrollable" /> 
+0

我找不到这一行,请问你能在xaml文件中显示你的代码吗? –

+0

@Dunno你看看更新的答案!希望能帮助到你。 ...还要区分xaml和axml之间的区别,因为xaml在Xamarin Forms中用于创建UI,而axml是Android平台特定的设计语言! – MalokuS

+0

啊,我忘了告诉你,我不希望让本地谟定制的渲染,我将修改我的问题,谢谢您的回答 –

2

您也可以通过创建一个CustomRednerer改变这一点。如果您想要在应用程序中创建多个选项卡式页面,并且希望使用可滚动选项卡制作其中的一个,然后使用不可滚动选项卡制作其中一个,则我的解决方案很好。

这里是Droid的项目代码:

using Android.Support.Design.Widget; 
using App1; 
using App1.Droid; 
using Xamarin.Forms; 
using Xamarin.Forms.Platform.Android.AppCompat; 

[assembly: ExportRenderer(typeof(ScrollableTabbedPage), typeof(ScrollableTabbedPageRenderer))] 
namespace App1.Droid 
{ 
    public class ScrollableTabbedPageRenderer : TabbedPageRenderer 
    { 
     public override void OnViewAdded(Android.Views.View child) 
     { 
      base.OnViewAdded(child); 
      var tabLayout = child as TabLayout; 
      if (tabLayout != null) 
      { 
       tabLayout.TabMode = TabLayout.ModeScrollable; 
      } 
     } 

    } 
} 

对于便携式项目:

using System; 
using Xamarin.Forms; 

namespace App1 
{ 
    public class ScrollableTabbedPage : TabbedPage 
    { 
    } 

    public class App : Application 
    { 
     public App() 
     { 
      var tabbedPage = new ScrollableTabbedPage(); 
      for (int i = 0; i < 7; i++) 
      { 
       tabbedPage.Children.Add(this.GetMyContentPage(i)); 
      } 

      MainPage = new NavigationPage(tabbedPage); 
     } 

     private ContentPage GetMyContentPage(int i) 
     { 
      return new ContentPage 
      { 
       Title = "Tab number " + i, 
       Content = new StackLayout 
       { 
        Children = { 
         this.GetMyButton() 
        } 
       } 
      }; 
     } 

     private Button GetMyButton() 
     { 
      var myButton = new Button() 
      { 
       Text = "Welcome to Xamarin Forms!", 
      }; 

      myButton.Command = new Command(() => 
      { 
       myButton.Text = "Start" + DateTime.Now.ToString(); 
      }); 
      return myButton; 
     } 
    } 
} 

而对于结果你将会得到:

page with scrollable tabs

+0

谢谢您的回答,但我不希望让机自定义渲染谟。如果我无法找到任何解决方案,我将使用您的解决方案 –

0

@帕维尔Kanarek您的代码为Droid项目完美工作。只需要修改构建错误即可进行更改。

更改行:

[assembly: ExportRenderer(typeof(ScrollableTabbedPage), typeof(ScrollableTabbedPageRenderer))] 

到:

[assembly: ExportRenderer(typeof(TabbedPage), typeof(App1.Droid.ScrollableTabbedPageRenderer))] 

感谢您的解决方案。它完美地帮助了我。

相关问题