一 NavigationView 导航栏
NavigationView 通常和DrawerLayout一起配合使用
注意:配置的图标会变成灰色,需要代码设置
1 效果图
2 源码解析
NavigationView的源码很好的提现了MVP的思想
在MVP里,Presenter完全把Model和View进行了分离,主要的程序逻辑在Presenter里实现。
而且,Presenter与具体的View是没有直接关联的,
而是通过定义好的接口进行交互,从而使得在变更View时候可以保持Presenter的不变。View层显示功能,除此就不应该有更多的内容,绝不容许直接访问Model,这就是与MVC很大的不同之处。
- 构造方法:
mMenu = new NavigationMenu(context);
addView((View) mPresenter.getMenuView(this));
inflateMenu() 从 xml解析数据 到 mMenu
-
解析 view_meun
dom 解析 LayoutInflater
MenuInfalter 解析 xml
getMenuInflater().inflate(resId, mMenu);
xml 数据 加载到了 mMenu -
加载数据
填充头部视图
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
二 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);
}
}