zoukankan      html  css  js  c++  java
  • Android 右上角菜单栏

    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>


  • 相关阅读:
    js,JavaScript,a标签onclick传递参数不对,A标签调用js函数写法总结
    Java两大测试方法Junit和TestNG的比较
    java简单的测试方法执行了多少时间
    利用Chrome的Performance工具排查页面性能问题(原叫timeline)
    P3317 [SDOI2014]重建(Matrix-tree+期望)
    P2221 [HAOI2012]高速公路(线段树)
    P2473 [SCOI2008]奖励关(期望)
    P3302 [SDOI2013]森林(主席树+启发式合并)
    bzoj3932 / P3168 [CQOI2015]任务查询系统(主席树+差分)
    P2219 [HAOI2007]修筑绿化带(单调队列)
  • 原文地址:https://www.cnblogs.com/hanjun0612/p/9779736.html
Copyright © 2011-2022 走看看