参考:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/1118/2006.html
toolbar上的menu的使用:https://blog.csdn.net/yuzhongchun/article/details/8956256
memu的点击事件注意事项:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/1120/2025.html
https://www.cnblogs.com/wolf-bing/p/3153836.html
为控件添加menu菜单:https://blog.csdn.net/qq_32175491/article/details/53763861
AppCompatActivity是自带actionbar,所以必须先去掉,修改设置activity的theme如下:
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
--------------toolBar.xml----------------
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/toolbar_too"
android:layout_width="match_parent"
android:layout_height="?actionBarSize"
android:background="#3dd235"
>
<TextView
android:id="@+id/title_too"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="首页"
android:textColor="#ffffff"
android:textSize="20dp"
/>
</android.support.v7.widget.Toolbar>
设置导航:
public class BaseActivity extends AppCompatActivity {
private Toolbar toolbar;
@SuppressLint("NewApi")
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
public void initToolBar(String title,boolean isNav){
toolbar= (Toolbar) findViewById(R.id.toolbar_too);
if(toolbar!=null){
if(isNav){
toolbar.setNavigationIcon(R.mipmap.icon_goback_light);//设置toolBar的返回按钮图片
}
//返回按钮的点击事件
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();//结束当前activity,销毁
}
});
TextView title_nav=(TextView)findViewById(R.id.title_too);
title_nav.setText(title);//更改导航标题
}
}
}
public class MainActivity extends AppCompatActivity {
@SuppressLint("RestrictedApi")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.setTitle("aaaa");//主标题
toolbar.setSubtitle("bbb");//主标题正下方的附标题
toolbar.setLogo(R.drawable.ic_launcher_background);//logo
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);//这个是显示返回箭头
//toolbar.setNavigationIcon(R.mipmap.ic_launcher);//返回按钮图标
//toolbar.setOnMenuItemClickListener(onMenuItemLis);//将onMenuItemClick监听者设置给toolbar
setHasOptionsMenu(true);//
//添加左边图标点击事件
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.e("s","dd");
finish();
}
});
}
private void setHasOptionsMenu(boolean b) {
Log.e("d","ss");
}
沉浸式导航、隐藏导航栏https://www.jianshu.com/p/ce65dc7b0b56
Android应用中经常会有一些要求全屏显示、隐状态栏导航栏的需求。通过全屏沉浸式的处理可以让应用达到更好的显示效果。
//隐藏状态栏。必须放在 setContentView(R.layout.activity_main)之前设置,设置了隐藏状态栏,toolBar就会上移,占用原来状态栏的位置。 // requestWindowFeature(Window.FEATURE_NO_TITLE); // getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.activity_main);
隐藏导航栏的话,先获取到toolBar,然后设置隐藏。
在布局的最外层设置 android:fitsSystemWindows="true",会在屏幕最上方预留出状态栏高度的padding,如果没有这个设置,toolBar会把状态栏的位置占据(如果没有toolBar,让view的一部分页面进入状态栏的位置,和状态栏层叠,状态栏在最上面,达到沉浸式的效果)。由于fitsSystemWindows属性本质上是给当前控件设置了一个padding,所以我们设置到根布局的话,会导致状态栏是透明的,并且和窗口背景一样。我们经常设置在最上端的图片背景、Banner之类的,如果是Toolbar的,我们可以使用一层LinearLayout包裹,并把这个属性设置给LinearLayout,这样就可以避免Toolbar的内容下沉了
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/colorPrimary"
android:fitsSystemWindows="true"
android:orientation="vertical">
<android.support.v7.widget.Toolbar
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
tools:title="我是Title"/>
</LinearLayout>