【发布时间】:2017-09-25 13:51:00
【问题描述】:
我正在使用材料设计滑动标签(smartTabLayout),这里:https://github.com/ogaclejapan/SmartTabLayout
还有,Material Design 侧边导航抽屉(android 驻留菜单),这里:https://github.com/SpecialCyCi/AndroidResideMenu
我面临的问题是:当我从任何选项卡向左滑动时,导航抽屉会打开,但当我向右滑动时很好。
代码如下:
MainActivity.java:
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private static final String TAG = "MainActivity";
private SectionsPageAdapter sectionsPageAdapter;
private ViewPager viewPager;
Toolbar toolbar;
ResideMenu resideMenu;
SmartTabLayout smartTabLayout;
private MainActivity mContext;
private ResideMenuItem equalizer;
private ResideMenuItem ringtonemaker;
private ResideMenuItem identifysong;
private ResideMenuItem themes;
private ResideMenuItem rateus;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mContext = MainActivity.this;
setUpMenu();
toolbar = (Toolbar)findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
sectionsPageAdapter = new SectionsPageAdapter(getSupportFragmentManager());
viewPager = (ViewPager) findViewById(R.id.viewpager);
setupViewPager(viewPager);
smartTabLayout = (SmartTabLayout) findViewById(R.id.viewpagertab);
smartTabLayout.setViewPager(viewPager);
}
private void setupViewPager(ViewPager viewPager) {
SectionsPageAdapter adapter = new SectionsPageAdapter(getSupportFragmentManager());
adapter.addFragment(new Albums(), "Albums");
adapter.addFragment(new Artists(), "Artists");
adapter.addFragment(new Songs(), "Songs");
adapter.addFragment(new Playlists(), "Playlists");
adapter.addFragment(new Genres(), "Genres");
adapter.addFragment(new My_Files(), "My Files");
viewPager.setAdapter(adapter);
viewPager.setPageTransformer(true, new CubeInTransformer());
}
private void setUpMenu() {
// attach to current activity;
resideMenu = new ResideMenu(this);
resideMenu.setBackground(R.drawable.city);
resideMenu.attachToActivity(this);
//valid scale factor is between 0.0f and 1.0f. leftmenu'width is 150dip.
resideMenu.setScaleValue(0.6f);
// create menu items;
equalizer = new ResideMenuItem(this, R.drawable.city, "Equalizer");
ringtonemaker = new ResideMenuItem(this, R.drawable.city, "Ringtone Maker");
identifysong = new ResideMenuItem(this, R.drawable.city, "Identify Song");
themes = new ResideMenuItem(this, R.drawable.city, "Theme");
rateus = new ResideMenuItem(this, R.drawable.city, "Rate us");
equalizer.setOnClickListener(this);
ringtonemaker.setOnClickListener(this);
identifysong.setOnClickListener(this);
themes.setOnClickListener(this);
rateus.setOnClickListener(this);
resideMenu.addMenuItem(equalizer, ResideMenu.DIRECTION_LEFT);
resideMenu.addMenuItem(ringtonemaker, ResideMenu.DIRECTION_LEFT);
resideMenu.addMenuItem(identifysong, ResideMenu.DIRECTION_LEFT);
resideMenu.addMenuItem(themes, ResideMenu.DIRECTION_LEFT);
resideMenu.addMenuItem(rateus, ResideMenu.DIRECTION_LEFT);
// You can disable a direction by setting ->
resideMenu.setSwipeDirectionDisable(ResideMenu.DIRECTION_RIGHT);
}
@Override
public void onClick(View view) {
}
}
滑动标签的适配器:
class SectionsPageAdapter extends FragmentPagerAdapter {
private final List<Fragment> FragmentList = new ArrayList<>();
private final List<String> FragmentTitleList = new ArrayList<>();
public void addFragment(Fragment fragment, String Title){
FragmentList.add(fragment);
FragmentTitleList.add(Title);
}
public SectionsPageAdapter(FragmentManager fm) {
super(fm);
}
@Override
public CharSequence getPageTitle(int position) {
return FragmentTitleList.get(position);
}
@Override
public Fragment getItem(int position) {
return FragmentList.get(position);
}
@Override
public int getCount() {
return FragmentList.size();
}
}
activity_main.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/city"
tools:context="com.musicplayer.musicana.MainActivity">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="30dp"
android:title="Musicana"
app:titleTextColor="#ffffff">
</android.support.v7.widget.Toolbar>
<com.ogaclejapan.smarttablayout.SmartTabLayout
android:id="@+id/viewpagertab"
android:layout_width="match_parent"
android:layout_height="48dp"
android:layout_below="@+id/toolbar"
app:stl_indicatorAlwaysInCenter="false"
app:stl_indicatorWithoutPadding="false"
app:stl_indicatorInFront="false"
app:stl_indicatorInterpolation="smart"
app:stl_indicatorGravity="center"
app:stl_indicatorColor="#40C4FF"
app:stl_indicatorThickness="30dp"
app:stl_indicatorWidth="110dp"
app:stl_indicatorCornerRadius="10dp"
app:stl_overlineColor="#4D000000"
app:stl_overlineThickness="0dp"
app:stl_underlineColor="#ffffff"
app:stl_underlineThickness="0dp"
app:stl_dividerColor="#ffffff"
app:stl_dividerThickness="0dp"
app:stl_defaultTabBackground="?attr/selectableItemBackground"
app:stl_defaultTabTextAllCaps="false"
app:stl_defaultTabTextColor="#ffffff"
app:stl_defaultTabTextSize="16sp"
app:stl_defaultTabTextHorizontalPadding="30dp"
app:stl_defaultTabTextMinWidth="0dp"
app:stl_distributeEvenly="false"
app:stl_clickable="true"
app:stl_titleOffset="24dp"
app:stl_drawDecorationAfterTab="false"
/>
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/viewpagertab"
/>
</RelativeLayout>
【问题讨论】:
-
这就是您要找的东西吗?
resideMenu.addIgnoredView(viewPager); -
不,我试过了。这只会阻止整个 viewpager 访问侧导航抽屉。当我向左滑动第一个标签时,我想打开侧导航抽屉。无论如何,感谢您的帮助:)
-
你可以尝试类似的方法,当你到达 viewpager 上的第一个片段时,然后删除被忽略的视图,当你在其他页面上时,将 Viewpager 添加到被忽略的视图中。
-
是的,我会试试的。谢谢你:)
标签: android android-fragments tabs navigation navigation-drawer