Android-Navigation、Menu

Navigation

1、导入库;

def nav_version = "2.4.1"

// Java language implementation
implementation "androidx.navigation:navigation-fragment:$nav_version"
implementation "androidx.navigation:navigation-ui:$nav_version"

2、创建导航;

 

通过第一个图标加入节点(fragment),placeholder系空的新节点;

 通过拖拽设置前后节点;

 3、创建一个空Activity作为fragment的容器;

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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:id="@+id/goto_00"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".fragment.GotoActivity">

    <androidx.fragment.app.FragmentContainerView
        android:id="@+id/fragment"
        android:name="androidx.navigation.fragment.NavHostFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:defaultNavHost="true"
        app:navGraph="@navigation/nav_graph" />
</androidx.constraintlayout.widget.ConstraintLayout>

app:navGraph 属性将 NavHostFragment 与导航图相关联。导航图会在此 NavHostFragment 中指定用户可以导航到的所有目的地。

app:defaultNavHost="true" 属性确保您的 NavHostFragment 会拦截系统返回按钮。

注意只能有一个默认 NavHost。如果同一布局(例如,双窗格布局)中有多个宿主,请务必仅指定一个默认 NavHost。

4、根据需求为布局文件实现目标功能;

如:

public class ChooseFragment00 extends Fragment implements View.OnClickListener {
    private Button option_a,option_b,option_c;

    // Required empty public constructor
    public ChooseFragment00 (){}

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
        View view =inflater.inflate(R.layout.fragment_00, container, false);
        option_a = view.findViewById(R.id.option_a);
        option_a.setOnClickListener(this);
        option_b = view.findViewById(R.id.option_b);
        option_b.setOnClickListener(this);
        option_c = view.findViewById(R.id.option_c);
        option_c.setOnClickListener(this);
        return view;
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()){
            case R.id.option_a:
                Navigation.findNavController(view).navigate(R.id.action_fragment_00_to_fgt_option_a);
                break;
            case R.id.option_b:
                Navigation.findNavController(view).navigate(R.id.action_fragment_00_to_fgt_option_b);
                break;
            case R.id.option_c:
                Navigation.findNavController(view).navigate(R.id.action_fragment_00_to_fgt_option_c);
                break;
        }
    }
}

onCreateView

View view =inflater.inflate(R.layout.fragment_00, container, false);创建与对应布局的连接;

onClick

实现事件发生。


Menu

1、同样的在res中创建menu文件夹;

2、在menu中创建菜单视图;

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/chat"
        android:icon="@drawable/baseline_account_balance_red_500_24dp"
        android:title="@string/icon_1"
        app:showAsAction="ifRoom" />
    <item
        android:id="@+id/add_friend"
        android:icon="@drawable/baseline_details_white_24dp"
        android:title="@string/icon_2" />
</menu>

 3、两个主要方法;

    //给activity加载menu
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        //加载菜单文件
        inflater.inflate(R.menu.menu_base, menu);
        return super.onCreateOptionsMenu(menu);//必须调用父类的方法
    }

    //重写方法,处理点击菜单项的事件
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // 处理点击菜单项的事件
        switch (item.getItemId()) {
            case R.id.chat:
                this.textContent.setText("发起群聊!");
                return true;
            case R.id.add_friend:
                this.textContent.setText("添加朋友!");
                return true;
            default://其他的要这样返回,固定模式
                return super.onOptionsItemSelected(item);
        }
    }

重写onCreateOptionsMenu方法实现对菜单的加载,

重写onOptionsItemSelected方法实现对用户点击菜单项的事件响应,

也可重写onPrepareOptionsMenu() 方法动态改变菜单项

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值