这个按钮的大致需求是在屏幕右上角新增一个Button,点击之后在屏幕顶部与右侧召唤一系列的功能按钮,
我把这部分代码抽出来随便写了一个demo,需求实现上图:
(在点击按钮2的时候如果已经处于登录界面就提示用户不需要再次跳转,下面会有说明)
需求拿到手,心想:还好之前title是用的一个自定义View,随便在右边加个按钮不就妥了!!结果还是太天真啊,首先如果要实现如上的效果,这个布局肯定不好写,其次这尼玛有得页面根本没有title啊,然后联想到之前做过一个全局的悬浮按钮,但是这货需要悬浮窗的权限,如果用户没有开启就特么显示不出来~~~
然后第一想法就是各种度- -,结果发现网上根本没有这样的需求,莫非是我找的姿势不对?这就有点尴尬了,那就只能自己造轮子了...
额额,废话说了一大堆,开始切入正题吧- -
要在所有Activity添加统一的全局menu,那么很容易想到的就是在BaseActivity中做操作,既然是要添加统一的视图,那么就要在BaseActivity的setContentView()方法中添加一个menu视图了。我的做法如下:
@Override
public void setContentView(int layoutResID) {
super.setContentView(layoutResID);
((ViewGroup) getWindow().getDecorView()).addView(menu);
}
这个getDecorView:这个方法是获取顶级视图
注意点1:addView添加入的视图应该是默认在左上角,和group里面原有的视图无关
注意点2:getDecorView既然是顶级视图,它包含整个屏幕,包括标题栏
注意点3:根据实际测试发现,标题栏的左上角位置的坐标才是坐标原点位置
此处引用了 http://blog.csdn.net/rnZuoZuo/article/details/44959873的介绍,如果对这个方法有兴趣的童鞋可以自行查找资料哈,这里就不详细介绍了~~
我们这里menu是一个自定义View,继承了RelativeLayout,加载了一个很简单的RelativeLayout,该布局中将所有的按钮全部添加到屏幕右上角:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/menu_parent"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingRight="10dp"
android:paddingTop="45dp">
<Button
android:id="@+id/btn_one"
android:layout_width="50dp"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_marginRight="15dp"
android:layout_marginTop="17dp"
android:background="@null"
android:drawableTop="@mipmap/assist_1"
android:paddingBottom="5dp"
android:text="按钮1"
android:textSize="10sp" />
<Button
android:id="@+id/btn_two"
android:layout_width="50dp"
android: