Toolbar
去掉actionbar的方式
supportRequestWindowFeature(Window.FEATURE_NO_TITLE)
用于AppCompatActivity继承的Activity去除actionbar,在onCreate方法的setContentView(R.layout.activity_main)
方法之前.
(RequestWindowFeature(Window.FEATURE_NO_TITLE)
用于Activity的继承类,Activity继承类默认没有actionbar)- 在styles.xml文件中配置无actionbar主题
<!-- Base application 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>
- 对于特定的Activity,也可以在manifest文件中进行配置
<activity
android:name=".MainActivity"
android:label="@string/app_name"
<!-- 这行代码便可以隐藏 ActionBar -->
<android:theme="@android:style/Theme.Light.NoTitleBar" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
toolbar使用
toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
关于include标签的说明
- 在include标签中不包含id,例如,那么直接可以根据layout布局的id进行findViewById,需要注意的是,当多个include标签内包含相同id的时候,只会找到第一个id控件.
当include标签中包含id的时候,例如下图中include标签的id是include_toolbar.
<include
android:layout_width="match_parent"
android:id="@+id/include_toolbar"
layout="@layout/toolbar_layout"
android:layout_height="wrap_content" />
toolbar_layout文件
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:elevation="4dp"
android:background="@color/colorPrimary">
<TextView
android:id="@+id/toolbar_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:text="标题"
android:textColor="@android:color/white" />
</android.support.v7.widget.Toolbar>
在这种情况下,如果想要找到toolbar控件,include的id进行findViewById直接返回最外层控件view,然后根据最外层控件view,进行findViewById寻找其他内层控件id.
Toolbar toolbar = findViewById(R.id.include_toolbar);//include的id直接返回layout布局中最外层控件
TextView toolbar_title = toolbar.findViewById(R.id.toolbar_title);//根据最外层控件寻找layout中的其他id
toolbar_title.setText("我的标题");
toolbar的常用操作
- 几个属性. title,subtitle,logo,navigationIcon,通过向toolbar布局中添加textview实现标题在中间的效果
- Toolbar setNavigationIcon无效原因: 1.设置在
setSupportActionBar( mToolbar )
之前无效; 2.设置在DrawerLayout.setDrawerListener(ActionBarDrawerToggle);
之前也无效.Toolbar.setNavigationClickListener
同样适用本规则 getSupportActionBar().setDisplayHomeAsUpEnabled(true);
//显示一个返回的小箭头,系统默认id为android.R.id.home.
设置这个箭头的监听事件可以有两种方式:
在onOptionsItemSelected方法中根据系统id 设置响应事件
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
Toast.makeText(MainActivity.this, "home", Toast.LENGTH_SHORT).show();
break;
}
return true;
}
- 如果当前的actionbar采用的是toolbar,此时的home图标也是navigation图标,可以通过setNavigation的监听事件来设置返回功能,如果设置了该监听方法,上面的onOptionsItemSelected不再生效.
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "navigation", Toast.LENGTH_SHORT).show();
}
});
- 关于设置logo的方法
getSupportActionBar().setDisplayShowHomeEnabled(true)
和title的方法getSupportActionBar().setDisplayShowTitleEnabled(false);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);//显示一个返回的小箭头
/**
*是否显示默认logo,该设置会使得
*getSupportActionBar().setLogo(R.drawable.ic_launcher_background)方法无效,
*但是该方法完全不影响toolbar.setlogo,该方法设定后始终生效
**/
getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().setLogo(R.drawable.ic_launcher_background);
toolbar.setLogo(R.mipmap.ic_launcher);
/**
*是否显示系统默认的title,默认为true,如果调用getSupportActionBar().setTitle("title");
*那么该方法会变为false,这时调用toolbar.settitle会生效.
*如果想通过toolbar.settitle方法直接设定标题,这个Enable方法应该设定为false
**/
getSupportActionBar().setDisplayShowTitleEnabled(false);
getSupportActionBar().setTitle("这是");
toolbar.setTitle("这是label");