Android 右上角菜单栏
Android 菜单栏 右上角
2023-09-11 14:21:22 时间
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 APK自动化测试
- [Android Pro] 利用tcpdump和wireshark对android网络请求进行分析
- Android 开发之旅:短信的收发及在android模拟器之间实践(一)
- Android开发学习---android下的数据持久化,保存数据到rom文件,android_data目录下文件访问的权限控制
- android 深入研究ratingbar自定义
- Android studio 提示“android qemu-system-i386.exe停止工作”
- macos安装android studio(Android Studio 2021.1.1)
- 《android开发艺术探索》读书笔记(十五)--Android性能优化
- Android 2.3 r1 中文API (78)—— ViewAnimator
- 【VLC-Android】vlc-android简例
- Android 状态栏为白色的时候图标不显示的解决方案
- Android 11.0 12.0SystemUI增加低电量弹窗功能
- Android 10.0 Launcher3的workspace的app的名称分两行显示(BubbleTextView 两行显示)
- Android 10.0 系统禁用深色主题背景功能
- android 9.0 10.0 内部存储64G显示128G
- Android file.delete()与file.deleteOnExit()的区别
- 【Android Gradle 插件】build.gradle 中的 android 配置 ( 配置项 | compileSdkVersion 配置 | buildToolsVersion 配置 )
- 【Android 逆向】Android 权限 ( Android 逆向中使用的 android.permission 权限 | Android 系统中的 Linux 用户权限 )
- 【Android布局】在程序中设置android:gravity 和 android:layout_Gravity属性
- elcipse 编译cocos2d-x android
- Please ensure that adb is correctly located at 'D:Androidandroid-sdkplatform-toolsadb.exe' and
- kali linux on android armhf 安装 tmate
- android学习笔记
- Android 解决之依赖包中添加的com.android.support版本不同导致冲突的问题