📌  相关文章
📜  使用ArcNavigationView的Android中的曲线导航抽屉(1)

📅  最后修改于: 2023-12-03 14:49:47.808000             🧑  作者: Mango

使用ArcNavigationView的Android中的曲线导航抽屉

ArcNavigationView 是一个基于 Android 的曲线导航抽屉,可以让您的应用程序拥有现代化且独特的导航菜单样式。

准备工作

首先,您需要在项目的 build.gradle 文件中添加以下依赖:

implementation 'com.github.armcha:SpaceNavigationView:1.7.4'
使用ArcNavigationView
步骤1-添加ArcNavigationView到XML布局文件中

在您的 XML 布局文件中,添加以下代码来添加 ArcNavigationView :

<com.github.armcha.space_navigation_view.SpaceNavigationView
        android:id="@+id/spaceNavigationView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:colorMode="solid"
        app:showBadge="false"
        app:spaceBackgroundColor="@color/colorPrimary"
        app:spaceNavigationListener="@{vm::onNavigationItemSelected}"
        app:spaceItems="@{vm.items}" />
  • colorMode:此属性指定 ArcNavigationView 的颜色模式(实心或透明)。
  • showBadge:此属性指定是否显示徽章。
  • spaceBackgroundColor:此属性指定 ArcNavigationView 的背景颜色。
  • spaceNavigationListener:此属性指定当某个选项被选中时要调用的方法。
  • spaceItems:此属性指定 ArcNavigationView 的选项。

注意:SpaceNavigationView 需要以下属性才能正常工作:

xmlns:app="http://schemas.android.com/apk/res-auto"
步骤2-在代码中初始化ArcNavigationView

在您的代码中,您需要初始化 ArcNavigationView,并创建您的选项:

public class MainActivity extends AppCompatActivity {
    private SpaceNavigationView spaceNavigationView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        spaceNavigationView = findViewById(R.id.spaceNavigationView);

        spaceNavigationView.initWithSaveInstanceState(savedInstanceState);
        spaceNavigationView.initWithNavController(findNavController(R.id.nav_host_fragment), new HashSet<>(Arrays.asList(R.id.homeFragment, R.id.searchFragment, R.id.profileFragment)));
    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        spaceNavigationView.onSaveInstanceState(outState);
    }
}
public class MainViewModel extends ViewModel {
    public final List<SpaceItem> items = new ArrayList<>();
    private final int[] itemIcons = new int[]{R.drawable.ic_home, R.drawable.ic_search, R.drawable.ic_account};
    private final String[] itemTitles = new String[]{"Home", "Search", "Account"};
    private LiveData<Integer> selectedItemIndexLiveData = new MutableLiveData<>(0);

    public MainViewModel() {
        for (int i = 0; i < itemIcons.length; i++) {
            items.add(new SpaceItem(itemTitles[i], itemIcons[i]));
        }
    }

    public void onNavigationItemSelected(int position) {
        selectedItemIndexLiveData.setValue(position);
    }
}
步骤3-实现导航切换

在您的代码中,您需要将导航器与 ArcNavigationView 绑定,以便它知道何时应该更改其选中的选项:

mainViewModel.getSelectedItemIndexLiveData().observe(this, new Observer<Integer>() {
    @Override
    public void onChanged(Integer selectedItemIndex) {
        switch (selectedItemIndex) {
            case 0:
            //处理第一个选项的点击事件
            break;
            case 1:
            //处理第二个选项的点击事件
            break;
            case 2:
            //处理第三个选项的点击事件
            break;
            default:
            break;
        }
    }
});
注意事项
  • ArcNavigationView 利用了 ConstraintLayout 的功能来组合自定义视图,因此您需要将依赖项添加到您的 build.gradle 文件中。
  • 若要启用选项卡上的徽章,请将 showBadge 属性设置为 true。
  • 注意,ArcNavigationView 目前不支持子菜单,但它的使用方式与原生导航抽屉非常相似。
  • 要检查选项卡上的徽章,请使用 SpaceItem 对象的 isBadgeShow 属性。
  • 您可以通过设置 SpaceItem 对象的 isActive 属性来激活/停用选项卡。