📅  最后修改于: 2023-12-03 14:49:47.808000             🧑  作者: Mango
ArcNavigationView 是一个基于 Android 的曲线导航抽屉,可以让您的应用程序拥有现代化且独特的导航菜单样式。
首先,您需要在项目的 build.gradle 文件中添加以下依赖:
implementation 'com.github.armcha:SpaceNavigationView:1.7.4'
在您的 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"
在您的代码中,您需要初始化 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);
}
}
在您的代码中,您需要将导航器与 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;
}
}
});