简体   繁体   English

TabLayout与片段上的ViewPager - Lollipop设备

[英]TabLayout with ViewPager on a fragment - Lollipop devices

I am developing an app where in my MainActivity I am using a Navigation Drawer to switch the fragments on the Frame layout. 我正在开发一个应用程序,在我的MainActivity中,我使用导航抽屉来切换Frame布局上的片段。

One of those fragments is a 'help' Fragment in which I am using a Tab layout and a viewpager to swipe among three pages, 'about us', 'help'& 'contact us' 其中一个片段是一个“帮助”片段,我在其中使用Tab布局和一个viewpager在三个页面之间滑动,“关于我们”,“帮助”和“联系我们”

Everything works fine on below lollipop devices.The actionbar seems to stick to the tab layout (used toolbar as an actionbar). 在下面的棒棒糖设备上一切正常。操作栏似乎坚持标签布局(使用工具栏作为操作栏)。

But on Lollipop devices it is shown like the actionbar and the tablayout are separated. 但是在Lollipop设备上,它显示为操作栏和tablayout分开。

How can I achieve the same on lollipop devices also? 我怎样才能在棒棒糖设备上实现相同的目标?

MainActivity : 主要活动 :

public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {

NavigationView navigationView;
ActionBarDrawerToggle toggle;
DrawerLayout drawer;
FragmentManager fm = getSupportFragmentManager();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    getSupportActionBar().setTitle("Title");

    drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    toggle = new ActionBarDrawerToggle(
            this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
    drawer.setDrawerListener(toggle);
    toggle.syncState();

    navigationView = (NavigationView) findViewById(R.id.nav_view);
    navigationView.setNavigationItemSelectedListener(this);
}

@Override
public boolean onNavigationItemSelected(MenuItem item) {
    int id = item.getItemId();
    if (id == R.id.nav_help) {
         getSupportActionBar().setTitle("Help");
        fm.beginTransaction().replace(R.id.l_frame_layout, new Help(),"help").commit();
    } 
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    drawer.closeDrawer(GravityCompat.START);
    return true;}

Help.java Help.java

public class Help extends Fragment {
ViewPager pager;

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.layout_help, container, false);
    return(rootView);
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

    final TabLayout tabLayout = (TabLayout)getActivity(). findViewById(R.id.tllayout_helpTABLAYOUTtl);
    tabLayout.addTab(tabLayout.newTab().setText("ABOUT"));
    tabLayout.addTab(tabLayout.newTab().setText("HELP"));
    tabLayout.addTab(tabLayout.newTab().setText("CONTACT"));

    tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
    actionBar = getActivity().getActionBar();

    pager = (ViewPager)getActivity().findViewById(R.id.vplayout_helpVIEVPAGERvp);
    pager.setAdapter(new MyPagerAdapter(getFragmentManager()));

    tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
        @Override
        public void onTabSelected(TabLayout.Tab tab) {
            pager.setCurrentItem(tab.getPosition());
        }
        @Override
        public void onTabUnselected(TabLayout.Tab tab) {

        }
        @Override
        public void onTabReselected(TabLayout.Tab tab) {

        }
    });

    pager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

        }
        @Override
        public void onPageSelected(int position) {


        }
        @Override
        public void onPageScrollStateChanged(int state) {

        }
    });
}

class MyPagerAdapter extends FragmentStatePagerAdapter {
    public MyPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int pos) {
        switch(pos) {

            case 0: AboutUs tab1 = new AboutUs();
                return  tab1;

            case 1: HelpRecharge tab2 = new HelpRecharge();
                return  tab2;

            case 2: ContactUs tab3 = new ContactUs();
                return  tab3;

            default: return  null;
        }
    }

   @Override
    public int getCount() {
        return 3;
    }
}}

在此输入图像描述

Seems like you have elevation set for the action bar in your style xml. 好像你的样式xml中的操作栏有高程设置。

For Android 5.0+, if you want to set your actionbar style as below: 对于Android 5.0+,如果要将操作栏样式设置如下:

<item name="android:elevation">0dp</item>

and for Support library compatibility use: 和支持库兼容性使用:

<item name="elevation">0dp</item>

Example of style for a AppCompat light theme: AppCompat灯光主题的样式示例:

<style name="Theme.MyApp.ActionBar" parent="style/Widget.AppCompat.Light.ActionBar.Solid.Inverse">
   <!-- remove shadow below action bar -->
   <!-- <item name="android:elevation">0dp</item> -->
   <!-- Support library compatibility -->
   <item name="elevation">0dp</item>
</style>

Then apply this custom ActionBar style to you app theme: 然后将此自定义ActionBar样式应用于您的应用主题:

<style name="Theme.MyApp" parent="Theme.AppCompat.Light">
    <item name="actionBarStyle">@style/Theme.MyApp.ActionBar</item>
</style>

Also for pre 5.0 Android, add this too to your app theme: 此外,对于5.0之前的Android,也将此添加到您的应用主题:

<!-- Remove shadow below action bar Android < 5.0 -->
<item name="android:windowContentOverlay">@null</item>

尝试通过添加以下代码动态设置工具栏的高程:

        appBarLayout.setElevation( 0 );

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM