android 两种方式实现沉浸式菜单在项目中所遇到的一些问题

效果图:
这里写图片描述

这里写图片描述
如果想改变返回键的图片,我们也可以在代码中进行处理:

 final ActionBar actionBar = getSupportActionBar();
        if (actionBar != null) {
            actionBar.setHomeAsUpIndicator(R.mipmap.main);
            actionBar.setDisplayHomeAsUpEnabled(true);
        }

可以看出这里并没有设置
actionBar.setHomeButtonEnabled(true);
也即是返回键可用,因为我们这里实现的是一个侧滑的效果。下面会有讲到。

首先,还是对这方面的知识(就自己目前所理解的来写)做一个总结。
我们如果要用AppCompatActivity来实现沉浸式菜单栏,个人觉得需要注意/了解的点:
1.因为在androidstuido中创建一个project之后,布局里面会自动生成一个toolbar。但是在此之前我们应该要知道,系统默认(不知道是不是应该叫做系统默认)的会有一个actionBar,如果我们在布局里面再写一个toolbar,就相当于是重复加了,创建project之后,直接运行项目之所以没有报错是因为我们在AndroidMainifest.xml中配置了android:theme=”@style/AppTheme.NoActionBar”
也即是去掉了系统默认actionBar

可以styles.xml从代码中看出

<style name="AppTheme.NoActionBar">
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
    </style>

windowActionBar 设置为 false 就是不使用默认的actionBar
windowNoTitle 设置为 true 就是不使用标题

2.至于标题栏,目前还不能够用代码来设置它的位置,所以如果我们需要标题居中或者是其它,我们可以自己定义一个布局,来设置标题的显示位置。
如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="60dp"
    android:orientation="vertical"
    tools:context=".MainActivity"
    <!--这句很重要-->
    android:fitsSystemWindows="true"
    android:background="?attr/colorPrimaryDark"  >

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="?attr/colorPrimary"
        android:theme="@style/AppTheme.AppBarOverlay"
        app:popupTheme="@style/AppTheme.PopupOverlay"
         <!--这句很重要-->
        android:fitsSystemWindows="true"
        >

        <TextView
            android:id="@+id/tv_title"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_gravity="center"
            android:gravity="center"
            android:textColor="@android:color/white"
            android:textSize="20sp" />
    </android.support.v7.widget.Toolbar>

</LinearLayout>

3.自带的返回键的使用

package demo.packg.myapplication;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBar;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.TextView;

public class MainActivity extends BaseActivity {
   
    private Toolbar toolbar;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView tv1= (TextView) findViewById(R.id.text1);
        //因为MainActivity在AndroidMainifest中,配置了去掉系统自带的标题栏,所以加了一个toolbar
        toolbar = (Toolbar) findViewById(R.id.toolbar);
        initActionBar();
        tv1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(MainActivity.this,MainActivity2.class));
            }
        });



    }
    public void initActionBar() {
        setSupportActionBar(toolbar);
        final ActionBar actionBar = getSupportActionBar();
        //设置返回键可用
        actionBar.setHomeButtonEnabled(true);
        actionBar.setDisplayShowHomeEnabled(true);//这两句就可以让actionBar的图标可以响应点击事件
        actionBar.setDisplayHomeAsUpEnabled(true);//这一句主要用于后面返回效果,后面会讲
        //由于标题栏名字的位置不能更改,所以想要更改标题栏的位置,就得自己自定义布局文件
        actionBar.setTitle("首页");
        //如果自己定义了标题栏,那么我们可以在这里设置标题栏为空
        actionBar.setTitle(null);

    }
}

这样写的话,我们仅可以看到是返回键的显示,但是点击效果却没有实现。
我们可以在公共的Activity中,如:BaseActivity中去添加一个这样的方法:

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // TODO Auto-generated method stub
        if (item.getItemId() == android.R.id.home) {
            finish();
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

这样说,肯定会有人不理解,附上一个参考案例,
http://blog.csdn.net/flowingflying/article/details/14001855

好了步入正题:
先说实现步骤:
1.加依赖:

 compile 'com.android.support:appcompat-v7:23.4.0'
 compile 'com.android.support:design:23.4.0'

2.在布局文件中进行书写(参考上面的那个布局就可以了)
至于属性:
android:fitsSystemWindows=”true”从网上看到的是说,加在最外层的布局中,因为我做项目的时候,刚开始用到的是 用样式来实现的,所以toolbar中也加的有,不过经过测试,如果在代码中实现的话,也不会影响效果。只针对最外层起作用的原因。
3.最重要的我觉得就是样式的配置了
在此,我简单的提一下吧。
因为我们用了toolbar,所以样式中的那两个属性

<item name="windowActionBar">false</item> 
<item name="windowNoTitle">true</item>

肯定要是全局的(在AndroidMainifest.xml中)
顺便解释一下:

<item name="colorPrimary">@color/colorPrimary</item>
<item name=
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值