【问题标题】:[Xamarin]style, Theme.Holo & Theme.AppCompat[Xamarin] 样式、Theme.Holo 和 Theme.AppCompat
【发布时间】:2017-04-18 06:07:05
【问题描述】:

我用标签页制作应用程序。

如果我使用 AppCompat,我无法自定义选项卡,但我可以使用 通过滑动操作移动标签。

如果我使用 Holo,我可以自定义标签,但我不能使用 通过滑动操作移动标签。

我的全息主题

      <resources>
        <!--my custom theme-->
        <style name="MyTheme"
                 parent="@android:style/Theme.Holo">
          <item name="android:actionBarTabTextStyle">@style/MyActionBarTabText</item>
          <item name="android:actionBarTabStyle">@style/MyActionBarTabStyle</item>
        <item name="android:background">#FFFFFF</item>    
        </style>

        <!--tab text style-->
        <style name="MyActionBarTabText"
               parent="@android:style/Widget.Holo.ActionBar.TabText">
          <item name="android:textColor">#000000</item>
          <item name="android:background">@drawable/tab_selector</item>    
        </style>


        <!--tab style-->
        <style name="MyActionBarTabStyle" parent="@android:style/Widget.Holo.ActionBar.TabView">
          <!--<item name="android:background">#DCEBF0</item>-->
          <item name="android:background">@drawable/tab_selector</item>
          <item name="android:layout_width">1dp</item>  
        </style>
      </resources>

我的 AppCompat 主题

      <resources>
          <style name="MyTheme" parent="MyTheme.Base">
          </style>
          <!-- Base theme applied no matter what API -->
          <style name="MyTheme.Base" parent="Theme.AppCompat.Light.DarkActionBar">
              <!--If you are using revision 22.1 please use just windowNoTitle. Without android:-->
              <item name="windowNoTitle">true</item>
              <!--We will be using the toolbar so no need to show ActionBar-->
              <item name="windowActionBar">false</item>
              <!-- Set theme colors from http://www.google.com/design/spec/style/color.html#color-color-palette-->


          <!-- You can also set colorControlNormal, colorControlActivated
               colorControlHighlight and colorSwitchThumbNormal. -->
              <item name="windowActionModeOverlay">true</item>    
          </style>


      </resources>

如何自定义标签并使用滑动操作?

或者我可以在 AppCompat 中仅将选项卡主题更改为 Holo 吗?

【问题讨论】:

    标签: android android-appcompat android-theme android-styles


    【解决方案1】:

    使用 Appcompat,您仍然可以通过编程方式完成:

    在您的 OnCreate 覆盖方法中使用此代码(您要显示选项卡的活动):

        //Setting TabLayout
        TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout);
        tabLayout.addTab(tabLayout.newTab());
        tabLayout.addTab(tabLayout.newTab());
        tabLayout.addTab(tabLayout.newTab());
        tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
    
        //Setting viewPager
        final ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
        final PagerAdapter adapter = new 
                                  PagerAdapter(getSupportFragmentManager(), 
                                  tabLayout.getTabCount());
        viewPager.setAdapter(adapter);
        viewPager.addOnPageChangeListener(new 
                       TabLayout.TabLayoutOnPageChangeListener(tabLayout));
        tabLayout.setupWithViewPager(viewPager); 
    

    并像这样为您的页面适配器创建一个类:

    public class PagerAdapter extends FragmentStatePagerAdapter {
       int mNumOfTabs;
    
       private String[] tabTitles = new String[]{"TAB1", "TAB2", "TAB3"};
    
    
       public PagerAdapter(FragmentManager fm, int NumOfTabs) {
          super(fm);
          this.mNumOfTabs = NumOfTabs;
       }
    
       @Override
       public CharSequence getPageTitle(int position) {
           return tabTitles[position];
       }
    
       @Override
       public Fragment getItem(int position) {
    
        switch (position) {
            case 0:
                Tab1 tab1 = new Tab1();
                return tab1;
            case 1:
                Tab2 tab2 = new Tab2();
                return tab2;
            case 2:
                Tab3 tab3 = new Tab3();
                return tab3;
            default:
                return null;
        }
    }
    
    @Override
    public int getCount() {
        return mNumOfTabs;
    }
    }
    

    这是您在 xml 布局文件中定义 ViewPager 的方式:

        <android.support.v4.view.ViewPager
         android:id="@+id/pager"
         android:layout_width="match_parent"
         android:layout_height="fill_parent"
         android:layout_below="@id/tab_layout"
         android:background="@drawable/gradient_grey">
    

    让我知道它是否适合你!

    【讨论】:

      猜你喜欢
      • 2016-08-18
      • 1970-01-01
      • 2018-09-07
      • 1970-01-01
      • 1970-01-01
      • 2015-07-24
      • 1970-01-01
      • 1970-01-01
      • 2016-09-01
      相关资源
      最近更新 更多