SeniorUI27_NavigationView+ToolBar

SeniorUI_高级UI汇总目录

一 NavigationView 导航栏

NavigationView 通常和DrawerLayout一起配合使用
注意:配置的图标会变成灰色,需要代码设置

1 效果图

在这里插入图片描述

2 源码解析

NavigationView的源码很好的提现了MVP的思想
在MVP里,Presenter完全把Model和View进行了分离,主要的程序逻辑在Presenter里实现。
而且,Presenter与具体的View是没有直接关联的,
而是通过定义好的接口进行交互,从而使得在变更View时候可以保持Presenter的不变。View层显示功能,除此就不应该有更多的内容,绝不容许直接访问Model,这就是与MVC很大的不同之处。

  1. 构造方法:

mMenu = new NavigationMenu(context);
addView((View) mPresenter.getMenuView(this));
inflateMenu() 从 xml解析数据 到 mMenu

  1. 解析 view_meun
    dom 解析 LayoutInflater
    MenuInfalter 解析 xml
    getMenuInflater().inflate(resId, mMenu);
    xml 数据 加载到了 mMenu

  2. 加载数据
    填充头部视图
    mHeaderLayout = (LinearLayout) mLayoutInflater.inflate(R.layout.design_navigation_item_header, mMenuView, true);
    头部添加到ReacyView
    全成员变量 LinearLayout mHeaderLayout;
    数据源
    private final ArrayList mItems = new ArrayList<>();

3 简单使用

view_menu.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <group>
        <item
            android:id="@+id/nav_me"
            android:icon="@mipmap/ic_friends_gray_24"
            android:title="我" />
        <item
            android:id="@+id/nav_friend"
            android:title="好友"
            android:icon="@mipmap/ic_friends_gray_24"/>
        <item
            android:id="@+id/nav_notification"
            android:title="通知"
            android:icon="@mipmap/ic_notification_gray_24"/>
        <item
            android:id="@+id/nav_message"
            android:title="私信"
            android:icon="@mipmap/ic_messages_gray_24"
            />

    </group>
    <group
        android:id="@+id/group_manage">
        <item
            android:id="@+id/nav_manage"
            android:title="应用管理"
            android:icon="@mipmap/ic_app_management_gray_24"/>
    </group>

    <group
        android:checkableBehavior="none"
        android:id="@+id/group_settings">
        <item android:id="@+id/nav_theme"
            android:title="主题风格"/>
        <item android:id="@+id/nav_night"
            android:title="夜间模式"/>
        <item android:id="@+id/nav_setting"
            android:title="设置"/>
        <item android:id="@+id/nav_suggestion"
            android:title="意见反馈"/>
        <item android:id="@+id/nav_about"
            android:title="关于"/>

    </group>
</menu>

布局中

  <android.support.design.widget.NavigationView
        android:id="@+id/navigation"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        app:headerLayout="@layout/head"
        app:menu="@menu/view_menu"
        >

使用:

public class NavigationActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {

    DrawerLayout drawerLayout;
    NavigationView navigationView;
    TextView content;
    Snackbar snackbar;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.navigation_activity);
        drawerLayout = (DrawerLayout) findViewById(R.id.drawer);
        navigationView = (NavigationView) findViewById(R.id.navigation);
        content = (TextView) findViewById(R.id.content);
        navigationView.setNavigationItemSelectedListener(this);
    }

    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
        int id = item.getItemId();
        String string = null;
        switch (id) {
            case R.id.nav_me:
                string = "我";
               /* Intent intent = new Intent(this, LoginActivity.class);
                startActivity(intent);*/
                Toast.makeText(NavigationActivity.this, string,Toast.LENGTH_SHORT  );
                break;
            case R.id.nav_about:
                string = "关于";

                break;
            case R.id.nav_friend:
                string = "好友";
                snackbar = Snackbar.make(content, "动脑学院", Snackbar.LENGTH_INDEFINITE).setAction("确定", new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                    }
                });
                snackbar.show();
                break;
            case R.id.nav_manage:
                string = "通知";
                snackbar.dismiss();
                break;
            case R.id.nav_message:
                string = "私信";
                Snackbar.make(content, "动脑学院2", Snackbar.LENGTH_SHORT).show();
                break;
            case R.id.nav_night:
                string = "夜间模式";
                break;
            case R.id.nav_notification:
                string = "通知";
                break;
            case R.id.nav_setting:
                string = "设置";
                break;
            case R.id.nav_suggestion:
                string = "意见反馈";
                break;
            case R.id.nav_theme:
                string = "主题风格";
                break;
        }
        if (!TextUtils.isEmpty(string))
            content.setText("你点击了" + string);
        drawerLayout.closeDrawer(GravityCompat.START);
        return false;
    }
}

4 Demo

NavigationActivity

扫描二维码关注公众号,回复: 8513023 查看本文章

二 ToolBar

1效果图

在这里插入图片描述
注意:Activity要继承AppCompatActivity,主题theme得类似NoTitleBar的

2 使用

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="368dp"
        android:layout_height="wrap_content"
        android:title="首页"
        android:background="@color/colorPrimary"
        app:collapseIcon="@drawable/icon_back"
        tools:layout_editor_absoluteY="0dp"
        tools:layout_editor_absoluteX="8dp">

ToolBarActivity extends AppCompatActivity

public class ToolBarActivity extends AppCompatActivity {

    Toolbar toolbar;

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

        toolbar = (Toolbar) findViewById(R.id.toolbar);
        toolbar.setNavigationIcon(R.drawable.icon_back);
        //替换actionBar  注意
        setSupportActionBar(toolbar);
        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });
        toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                Toast.makeText(ToolBarActivity.this, "点击", Toast.LENGTH_SHORT).show();
                return false;
            }
        });

        //弹出主题
//        toolbar.setPopupTheme();
        //
        toolbar.showOverflowMenu();
        //设置主标题字体样式
//        toolbar.setTitleTextAppearance();
        //设置副标题
//        toolbar.setSubtitleTextAppearance();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        getMenuInflater().inflate(R.menu.view_item,menu);

        MenuItem menuItem = menu.findItem(R.id.action_search);
        //v14    v14之后版本
//        SearchView searchView = (SearchView) MenuItemCompat.getActionView(menuItem);

        SearchView searchView= (SearchView) menuItem.getActionView();
        //一进来就是 输入框     不隐藏
//        searchView.setIconified(false);


        ImageView imageView= (ImageView) searchView.findViewById(R.id.search_go_btn);
        imageView.setImageResource(R.drawable.abc_ic_voice_search_api_mtrl_alpha);
        imageView.setVisibility(View.VISIBLE);
        searchView.setSubmitButtonEnabled(true);


//        imageView.setImageResource(R.mipmap.ic_launcher);
//        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
//            //文字输入完成   提交
//            @Override
//            public boolean onQueryTextSubmit(String query) {
//                return false;
//            }
//            //当文字发生改变
//            @Override
//            public boolean onQueryTextChange(String newText) {
//                return false;
//            }
//        });
//        //当用户点击   input
//        searchView.setOnSearchClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View v) {
//
//            }
//        });
        return super.onCreateOptionsMenu(menu);
    }
}

3 Demo

NavigationView

发布了211 篇原创文章 · 获赞 63 · 访问量 14万+

猜你喜欢

转载自blog.csdn.net/baopengjian/article/details/103585453