解决方法一:使用Fragment和TabLayout实现多个布局的工具栏
创建一个包含多个布局的工具栏的Activity或Fragment。
在布局文件中添加一个TabLayout和ViewPager,用于切换和展示不同的布局。
创建多个Fragment或View,每个Fragment或View对应一个布局。
创建一个FragmentPagerAdapter或PagerAdapter,用于管理Fragment或View的切换。
在Activity或Fragment中初始化TabLayout和ViewPager,并设置PagerAdapter。
在PagerAdapter中实现getItem()方法,返回对应位置的Fragment或View。
示例代码如下:
public class ToolbarActivity extends AppCompatActivity {
private TabLayout tabLayout;
private ViewPager viewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_toolbar);
tabLayout = findViewById(R.id.tabLayout);
viewPager = findViewById(R.id.viewPager);
ToolbarPagerAdapter adapter = new ToolbarPagerAdapter(getSupportFragmentManager());
adapter.addFragment(new Fragment1(), "布局1");
adapter.addFragment(new Fragment2(), "布局2");
adapter.addFragment(new Fragment3(), "布局3");
viewPager.setAdapter(adapter);
tabLayout.setupWithViewPager(viewPager);
}
private class ToolbarPagerAdapter extends FragmentPagerAdapter {
private final List fragmentList = new ArrayList<>();
private final List titleList = new ArrayList<>();
public ToolbarPagerAdapter(FragmentManager fragmentManager) {
super(fragmentManager);
}
public void addFragment(Fragment fragment, String title) {
fragmentList.add(fragment);
titleList.add(title);
}
@Override
public Fragment getItem(int position) {
return fragmentList.get(position);
}
@Override
public int getCount() {
return fragmentList.size();
}
@Override
public CharSequence getPageTitle(int position) {
return titleList.get(position);
}
}
}
注意:需要在布局文件中定义TabLayout和ViewPager的id,并在res/values/strings.xml文件中定义标题字符串。
解决方法二:使用BottomNavigationView实现多个布局的工具栏
创建一个包含多个布局的工具栏的Activity或Fragment。
在布局文件中添加一个BottomNavigationView,用于切换和展示不同的布局。
创建多个Fragment或View,每个Fragment或View对应一个布局。
创建一个FragmentManager,用于管理Fragment的切换。
在Activity或Fragment中初始化BottomNavigationView,并设置切换监听器。
在切换监听器中使用FragmentManager切换Fragment。
示例代码如下:
public class ToolbarActivity extends AppCompatActivity {
private BottomNavigationView bottomNavigationView;
private Fragment1 fragment1;
private Fragment2 fragment2;
private Fragment3 fragment3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_toolbar);
bottomNavigationView = findViewById(R.id.bottomNavigationView);
fragment1 = new Fragment1();
fragment2 = new Fragment2();
fragment3 = new Fragment3();
getSupportFragmentManager().beginTransaction().replace(R.id.fragmentContainer, fragment1).commit();
bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.action_layout1:
getSupportFragmentManager().beginTransaction().replace(R.id.fragmentContainer, fragment1).commit();
return true;
case R.id.action_layout2:
getSupportFragmentManager().beginTransaction().replace(R.id.fragmentContainer, fragment2).commit();
return true;
case R.id.action_layout3:
getSupportFragmentManager().beginTransaction().replace(R.id.fragmentContainer, fragment3).commit();
return true;
}
return false;
}
});
}
}
注意:需要在布局文件中定义BottomNavigationView的id,并在res/menu/menu_toolbar.xml文件中定义菜单项。
以上是两种常见的解决多个布局的工具栏的方法,具体的实现方式可以根据实际需求进行调整和扩展。