说明:此博客主要用于讲解简单的电子阅览器的实现,本篇主要说明菜单界面的实现与代码
菜单界面框架菜单界面采用tablayout+viewpager2+fragment
实现,实现可滑动的菜单页面效果。
我们先来看主界面布局,mainactivity.xml
如下:
上述代码中,采用相对布局的方式,在底部使用tablayout
控件导航栏,导航栏以上部分为fragment
,展示具体一个页面内容,使用viewpager2
实现多个页面间的滑动。
MainActivity.java
代码如下
package com.example.ebooktest;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.viewpager2.widget.ViewPager2;
import androidx.fragment.app.Fragment;
import android.os.Bundle;
import com.google.android.material.tabs.TabLayout;
import com.google.android.material.tabs.TabLayoutMediator;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
private ViewPager2 viewPager;
private TabLayout tabLayout;
private String[] titles = {"书架", "分类"};
ArrayList<Fragment> fragments;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化滑动页面
initPage();
tabLayout = (TabLayout) findViewById(R.id.rg_tab_bar);
TabLayoutMediator tabLayoutMediator = new TabLayoutMediator(tabLayout,
viewPager, new TabLayoutMediator.TabConfigurationStrategy() {
@Override
public void onConfigureTab(@NonNull TabLayout.Tab tab, int position) {
tab.setText(titles[position]);
}
});
tabLayoutMediator.attach();
}
private void initPage() {
viewPager = findViewById(R.id.viewpage );
fragments = new ArrayList<>();
fragments.add(Fragment_Tab.newInstance() );
fragments.add(BFragment.newInstance());
MyFragmentPageAdapter pageAdapter = new MyFragmentPageAdapter(getSupportFragmentManager(),
getLifecycle(),fragments);
viewPager.setAdapter(pageAdapter);
}
}
上述代码中,主要是进行viewpager2
与多个fragment间的适配,然后利用TabLayoutMediator
将tabLayout
和ViewPager
关联,这样是为了在滑动fragment进行翻页时,相对应的标题栏被选中的位置也能同步变化。
紧接着我们需要完成viewpager2
适配器,MyFragmentPageAdapter.java
如下:
package com.example.ebooktest;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.lifecycle.Lifecycle;
import androidx.viewpager2.adapter.FragmentStateAdapter;
import java.util.ArrayList;
import java.util.List;
public class MyFragmentPageAdapter extends FragmentStateAdapter {
List<Fragment> fragmentList = new ArrayList<>(); //存储页面的fragment
//构造函数中 传递fragmentList
public MyFragmentPageAdapter(@NonNull FragmentManager fragmentManager, @NonNull Lifecycle lifecycle, List<Fragment> fragments) {
super(fragmentManager, lifecycle);
fragmentList = fragments;
}
@NonNull
@Override
public Fragment createFragment(int position) {
return fragmentList.get(position);
}
@Override
public int getItemCount() {
return fragmentList.size();
}
}
上述代码,createFragment
方法主要是根据position
来创建添加对应的Fragment
到ViewPager2
中去,
getItemCount
是是用于获取Fragment
的个数。
在创建分别创建BFragment
与Fragment_Tab
页面,去除prarm1
与prarm2
参数,即可完成基本的菜单框架
1.mainactivity.xml
中放置tablayout,fragment,viewpager2
控件,并对其进行布局。
2.设置ViewPager2
的适配器,最后利用TabLayoutMediator
将tabLayout
和ViewPager
关联。
最终效果如下:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)