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. GC调优入门笔记

    想给项目代码做做调优但有许多疑惑,比如有哪些参数要调.怎么调.使用什么工具.调优的效果如何定量测量等.发现Oracle的这份资料不错,简洁直接,回答了我的许多问题,给了许多很实用的大方向上的指导.将其 ...

  2. item 24: 区分右值引用和universal引用

    本文翻译自<effective modern C++>,由于水平有限,故无法保证翻译完全正确,欢迎指出错误.谢谢! 博客已经迁移到这里啦 古人曾说事情的真相会让你觉得很自在,但是在适当的情 ...

  3. Method not found: !!0[] System.Array.Empty()错误

    最近由于公司项目需要将之前支持的TLS1.0改成更安全的TLS1.2,而公司现有项目都是老系统,有的是.NET FrameWork 4.0,有的是.NET FrameWork3.5,但是TLS1.2默 ...

  4. c++入门之——const在函数名前面和函数后面的区别

    class Test(){ public: Test(){} const int foo(int a); const int foo(int a) const; }; 一.概念 当const在函数名前 ...

  5. vue学习笔记总结----思维导图

  6. JDK8-新特性-附demo

    import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Base64; impor ...

  7. Spring Data Elasticsearch 和 x-pack 用户名/密码验证连接

    Elasticsearch Java API 客户端连接 一个是TransportClient,一个是NodeClient,还有一个XPackTransportClient TransportClie ...

  8. 在IDEA中配置Spring的XML装配

    不考虑混合模式的话,Spring有三类装配Bean的方法,自动装配和Java代码装配都会很容易上手,但在弄XML装配时遇到了问题,这与IDEA环境有关. 装配时需要在源码中配置XML文件的位置,我看别 ...

  9. html总结:文本框填满表格

    <style> input { width: 100%; }</style>

  10. Linux之磁盘挂载

    1.查看磁盘分区情况: fdisk -l 可以看到,红框中的硬盘没有分区. 2.开始分区: fdisk /dev/vdb 3.格式化分区: mkfs.xfs 分区名 4.挂载磁盘 挂载方式1: 手动挂 ...