1 创建菜单栏

在res下新建menu文件夹,并且创建righttopmenu.xml

righttopmenu.xml:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/fist"
android:title="@string/logout"
></item> <item
android:id="@+id/second"
android:title="@string/update"
></item> </menu>

2 创建righttopmenu的activity

public class TopRightMenuActivity extends AppCompatActivity {

    public TopRightMenuActivity()
{
//子类添加到 AllActivitites,注销时直接调用 logout()方法
AllActivitites.add(this);
} //region 版本更新
//Spinner
@SuppressLint("HandlerLeak")
Handler handler1 = new Handler() {
@Override
public void handleMessage(Message msg) {
//获取完版本后,执行的操作 }
}; public void VersionUpdate() { new Thread(new Runnable() {
@Override
public void run() {
try { //连接Web api 获取版本,这里省略了。
handler1.sendMessage(msg);
} catch (Exception e) { } }
}).start();
}
//endregion @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//指定窗体使用菜单栏
//这句话应该放在子类中,后面会提到
//setContentView(R.layout.activity_main);
} @Override
public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.righttopmenu, menu);
return true;
} // 菜单的监听方法
@Override
public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) {
case R.id.fist:
//清楚登录信息 SharedPreferences setting = getSharedPreferences("setting", 0);
SharedPreferences.Editor editor = setting.edit();
editor.remove("account").commit();
editor.remove("pwd").commit();
//释放所有activity
logout(); Intent intent = new Intent();
intent.setClass(TopRightMenuActivity.this, LoginActivity.class);
startActivity(intent); });
dialog.show();
break;
case R.id.second:
VersionUpdate();
break; default:
break;
}
return true; } //region logout后,关闭所有activity private static List<Activity> AllActivitites = new ArrayList<Activity>(); //注销是销毁所有的Activity
protected void logout() {
for (Activity activity : AllActivitites) {
if (activity != null) {
activity.finish();
}
}
} //endregion //菜单显示图片+文字
@Override
public boolean onMenuOpened(int featureId, Menu menu) {
if (menu != null) {
if (menu.getClass().getSimpleName().equalsIgnoreCase("MenuBuilder")) {
try {
Method method = menu.getClass().getDeclaredMethod("setOptionalIconsVisible", Boolean.TYPE);
method.setAccessible(true);
method.invoke(menu, true);
} catch (Exception e) {
e.printStackTrace();
}
}
}
return super.onMenuOpened(featureId, menu);
} }

3 使用菜单栏

public class MainActivity extends TopRightMenuActivity

其实继承一下就好了。

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); }
 

一般来说MainActivity都会setContentView的。犹豫继承了菜单栏,所以菜单栏会通过该子类activity的setContentView

默认设置了菜单栏

最后看下效果:

登录界面没有菜单栏

主界面右上角出现了菜单

点击右上角,出现了菜单按钮

PS:其中注意几点

1  login页面不需要菜单栏,所以没有继承righttopmainactivity

并且设置了NoActionBar,不现实标题栏

<activity
android:name=".LoginActivity" android:theme="@style/Theme.AppCompat.Light.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

2  由于我的style.xml设置的是

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">

在加入菜单后,子页面都呈现了灰色。

只要设置AndroidManifest.xml中的 theme属性就好了

<application

        android:theme="@style/Theme.AppCompat.Light">

    </application>

Android 右上角菜单栏的更多相关文章

  1. android 底部菜单栏实现(转)

    1.Android学习之BottomNavigationBar实现Android特色底部导航栏 2.Android底部导航栏的四种实现 3.Android BottomNavigationBar底部导 ...

  2. android底部菜单栏的编写

    开发工具android stdio,组件Radio Button 1.新建空项目DDDD 2.将事先准备好的图标复制到对应的文件夹中(如图),这五个文件夹都要拷进去,图标文件http://pan.ba ...

  3. Android底部菜单栏+顶部菜单

    底部菜单栏+顶部菜单(wechat)demo http://blog.csdn.net/evankaka/article/details/44121457 底部菜单demo http://blog.c ...

  4. Android Studio奇淫巧技

    目录 3.1 Android Studio使用初探 Project面板 Stucture面板 Android Monitor Keymap Tip of the Day 快速查找 Search Act ...

  5. Android群英传神兵利器读书笔记——第三章:Android Studio奇技淫巧

    这篇文章篇幅较长,可以使用版权声明下面的目录,找到感兴趣的进行阅读 3.1 Android Studio使用初探 Project面板 Stucture面板 Android Monitor Keymap ...

  6. Android Studio安装插件GsonFormat

    Android Studio菜单栏File > Settings > plugins' 这个是Android Studio搜索和安装插件的界面,下面直接上动图 : 安装结束后需要关闭重新启 ...

  7. 如何用Android Studio打多包名APK

    问题:项目中不同的分发渠道可能需要打包多种APK(同样的代码),包名可能是不一样的,如果一个一个修改包名重新编apk是很麻烦,可以参考下列步骤在Android Studio上操纵Gradle来打包不同 ...

  8. 新手学Android

    Eclipse平台下的新手Android学习记录. 1.打开一个本地的项目 在Project Explorer右键->Import->Existing Projects into Work ...

  9. 9. Android框架和工具之 SlidingMenu(抽屉菜单)

    详见为知笔记:Android / Android用户界面优化 / Android SlidingMenu菜单栏程序设计

随机推荐

  1. .NET Core Community 第四个千星项目诞生:微服务框架 Surging

    本文所有打赏将全数捐赠于 NCC(NCC 的资金目前由 倾竹大人 负责管理),请注明捐赠于 NCC.捐赠情况将由倾竹大人在此处公示. 提及 .NET 微服务,我们脑海中浮现的一系列印象中,总有 Sur ...

  2. Jmeter(三十六)_运行过程中改变负载

    顾名思义,jmeter在做性能测试时,可以在不停止脚本的情况下修改负载压力,达到期望的测试效果.我们将通过Constant Throughput Timer(吞吐量计时器)和Beanshell服务器来 ...

  3. .net core2 笔记

    资源: https://github.com/aspnet/home https://github.com/dotnet/cli https://www.cnblogs.com/billyang/p/ ...

  4. yosay

    $ npm install yosay const yosay = require('yosay'); console.log(yosay('Hello, and welcome to my fant ...

  5. python3 pip 安装Scrapy在win10 安装报错error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools": http://landinghub.visualstudio.com/visual-cpp-build-tools

    问题描述 当前环境win10,python_3.6.1,64位. 在windows下,在dos中运行pip install Scrapy报错: building 'twisted.test.raise ...

  6. 福大软工1816 · 课程计划预报(K班)

    实践课安排 对应教学周序 时间 内容 3 09.22 业界交流讲座 6 10.13 团队选题报告答辩 7 10.20 UML设计 8 10.27 团队项目需求答辩 11 11.17 团队现场编程实战与 ...

  7. pandas删除某一列的方法

    方法一:直接del df['column-name'] 删除sub_grade_列, 输入del df['sub_grade_x'] 方法二:采用drop方法,有下面三种等价的表达式: 1. df= ...

  8. 如何实现用将富文本编辑器内容保存为txt文件并展示

    1.实现思路 创建一个xx.txt文件,存放于项目路径下 用文件流去读取文件内容并将读取的内容存放到页面的富文本编辑器框内 富文本编辑框内容改变后,保存时用文件流的方式保存到xx.txt文件中 提示: ...

  9. ubuntu安装chkconfig.deb系统服务管理工具

    chkconfig简介:chkconfig命令主要用来更新(启动或停止)和查询系统服务的运行级信息. 参数用法:   --add 增加所指定的系统服务,让chkconfig指令得以管理它,并同时在系统 ...

  10. pip Read timed out 和 pip 源

    解决方法,设置超时时间 pip --default-timeout=100 install -U Pillow 安装时指定源(--index-url) #例如安装scipy时使用豆瓣的源 pip in ...