Toolbar and DrawerLayout

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");

DrawerLayout

drawerLayout的使用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值