[英]TabLayout with ViewPager on a fragment - Lollipop devices
我正在開發一個應用程序,在我的MainActivity中,我使用導航抽屜來切換Frame布局上的片段。
其中一個片段是一個“幫助”片段,我在其中使用Tab布局和一個viewpager在三個頁面之間滑動,“關於我們”,“幫助”和“聯系我們”
在下面的棒棒糖設備上一切正常。操作欄似乎堅持標簽布局(使用工具欄作為操作欄)。
但是在Lollipop設備上,它顯示為操作欄和tablayout分開。
我怎樣才能在棒棒糖設備上實現相同的目標?
主要活動 :
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
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;
}
}}
好像你的樣式xml中的操作欄有高程設置。
對於Android 5.0+,如果要將操作欄樣式設置如下:
<item name="android:elevation">0dp</item>
和支持庫兼容性使用:
<item name="elevation">0dp</item>
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>
然后將此自定義ActionBar樣式應用於您的應用主題:
<style name="Theme.MyApp" parent="Theme.AppCompat.Light">
<item name="actionBarStyle">@style/Theme.MyApp.ActionBar</item>
</style>
此外,對於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.