android中怎么让menu菜单显示在屏幕左上角

如题所述

android 中让菜单menu显示在左上角,可以使用popupwindow技术,也就是悬浮菜单,设置默认的位置为左上角,如下代码:

package com.example.menutype;

import android.app.ActionBar.LayoutParams;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.PopupWindow;
import android.widget.PopupWindow.OnDismissListener;
import android.widget.TextView;
import android.widget.Toast;

/**
 * 
 * @author tr
 * @time 2014-3-10
 * @description è‡ªå®šä¹‰èœå•ï¼Œä¸‹æ‹‰èœå•æ ·å¼ï¼Œæ·»åŠ åŠ¨ç”»æ•ˆæžœï¼Œé‡å†™onMenuOpened()方法,自定义"menu"按键弹出菜单
 */
public class MainActivity extends Activity implements OnClickListener{
  
  private static Toast mToast;
  private static Context mContext;

  private PopupWindow popupWindow ;
  
  private Button btn_popupwindow;
  
  private View mPopupWindowView;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    
    mContext = this;
    
    btn_popupwindow = (Button) findViewById(R.id.btn_popupwindow);
    btn_popupwindow.setOnClickListener(this);
    
    initPopupWindow();
    
  }

  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
    /**actionBar上更多按钮*/
    getMenuInflater().inflate(R.menu.main, menu);
    
    
    
    /**点击menu,弹出菜单*/
    
  /*
   * 
   * add()方法的四个参数,依次是:
   * 
   * 1、组别,如果不分组的话就写Menu.NONE,
   * 
   * 2、Id,这个很重要,Android根据这个Id来确定不同的菜单
   * 
   * 3、顺序,那个菜单现在在前面由这个参数的大小决定
   * 
   * 4、文本,菜单的显示文本
   */

  menu.add(Menu.NONE, Menu.FIRST + 1, 1, getResource(R.string.edit_text)).setIcon(

  R.drawable.ic_edit);

  // setIcon()方法为菜单设置图标,这里使用的是系统自带的图标,同学们留意一下,以

  // android.R开头的资源是系统提供的,我们自己提供的资源是以R开头的

  menu.add(Menu.NONE, Menu.FIRST + 2, 2, getResource(R.string.file)).setIcon(

  R.drawable.ic_menu_file);

  menu.add(Menu.NONE, Menu.FIRST + 3, 3, getResource(R.string.about)).setIcon(

  R.drawable.ic_menu_about);

    return true;
  }
  
  
  /**菜单打开时调用*/
  @Override
  public boolean onMenuOpened(int featureId, Menu menu) {
    // TODO Auto-generated method stub
    showToast("menu菜单打开:"+featureId);
    //点击"menu"按钮打开
    if(featureId == 0){
      showPopupWindow();
    }
    return super.onMenuOpened(featureId, menu);// è¿”回为true åˆ™æ˜¾ç¤ºç³»ç»Ÿmenu
// return false;
  }

  /**menu菜单关闭时调用*/
  @Override
  public void onOptionsMenuClosed(Menu menu) {
    // TODO Auto-generated method stub
    super.onOptionsMenuClosed(menu);
    
    showToast("menu菜单关闭");
  }

  @Override
  public boolean onOptionsItemSelected(MenuItem item) {
    // TODO Auto-generated method stub
    switch(item.getItemId()){
    case Menu.FIRST + 1:
    case R.id.action_edit:
      showToast(getResource(R.string.edit_text));
      break;
    case Menu.FIRST + 2:
    case R.id.action_file:
      showToast(getResource(R.string.file));
      break;
    case R.id.action_favorite:
      showToast(getResource(R.string.favorite));
      break;
    case R.id.action_share:
      showToast(getResource(R.string.share));
      break;
    case Menu.FIRST + 3:
    case R.id.action_about:
      showToast(getResource(R.string.about));
      break;
    }
    return super.onOptionsItemSelected(item);
  }

  @Override
  public void onClick(View v) {
    
    switch(v.getId()){
    case R.id.btn_popupwindow:

      showPopupWindow();
      break;
    case R.id.textview_about:
      showToast(getResource(R.string.about));
      popupWindow.dismiss();
      break;
    case R.id.textview_edit:
      showToast(getResource(R.string.edit_text));
      popupWindow.dismiss();
      break;
    case R.id.textview_file:
      showToast(getResource(R.string.file));
      popupWindow.dismiss();
      break;
    }
  }
  
  /**显示popupwindow*/
  private void showPopupWindow(){

    if(!popupWindow.isShowing()){
      popupWindow.showAsDropDown(btn_popupwindow, btn_popupwindow.getLayoutParams().width/2, 0);
    }else{
      popupWindow.dismiss();
    }
  }
  
  
  /**
   * åˆå§‹åŒ–popupwindow
   */
  private void initPopupWindow(){
    initPopupWindowView();
    //初始化popupwindow,绑定显示view,设置该view的宽度/高度
    popupWindow = new PopupWindow(mPopupWindowView,LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
    popupWindow.setFocusable(true);
    popupWindow.setOutsideTouchable(true);
    // è¿™ä¸ªæ˜¯ä¸ºäº†ç‚¹å‡»â€œè¿”回Back”也能使其消失,并且并不会影响你的背景;使用该方法点击窗体之外,才可关闭窗体
    popupWindow.setBackgroundDrawable(getResources().getDrawable(R.drawable.bitmap_book_read_chapterlist_repeat));
    //Background不能设置为null,dismiss会失效
// popupWindow.setBackgroundDrawable(null);
    //设置渐入、渐出动画效果
// popupWindow.setAnimationStyle(R.style.popupwindow);
    popupWindow.update();
    //popupWindow调用dismiss时触发,设置了setOutsideTouchable(true),点击view之外/按键back的地方也会触发
    popupWindow.setOnDismissListener(new OnDismissListener() {
      
      @Override
      public void onDismiss() {
        // TODO Auto-generated method stub
// showToast("关闭popupwindow");
      }
    });
  }
温馨提示:内容为网友见解,仅供参考
第1个回答  2015-07-19
  用惯了Android的人在刚拿到iPhone的时候,总是会习惯性的用手指从状态栏往下拖一下,这都是给Notification闹的。
不过Notification也确实是1个不错的提示工具,不干扰正常的操作,事后还可以再翻看详细的内容,点击后还可以进入相关的画面查看更具体的内容。
今天我就以代码为主的形式来介绍Notification的使用,包括基本用法,自定义的View,以及更多的控制方法。
另一种Android中常用到的提示方法Toast的用法请参见《教程:在Android中使用Toast进行提示》
我们先看下Notification的几个主要组成部分:
Icon:不解释
Ticker Text:Notification刚出来的时候,在状态栏上滚动的字幕,如果很长,会自动分割滚动

Content Title:Notification展开后的标题
Content Text:Notification展开后的内容

Notification的一般用法
取得NotificationManager
  private NotificationManager mNotificationManager;
mNotificationManager = (NotificationManager)
getSystemService(Context.NOTIFICATION_SERVICE);
创建Notification并且显示
  //Notification的滚动提示
String tickerText = "My notification, It's a long text! Hello World desiyo?";
//Notification的图标,一般不要用彩色的
int icon = R.drawable.icon_02241_3;

//contentTitle和contentText都是标准的Notification View的内容
//Notification的内容标题,拖下来后看到的标题
String contentTitle="My notification";
//Notification的内容
String contentText="Hello World!";

//Notification的Intent,即点击后转向的Activity
Intent notificationIntent = new Intent(this, this.getClass());
notificationIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0,
notificationIntent, 0);

//创建Notifcation
Notification notification = new Notification(icon, tickerText, System.currentTimeMillis());
//设定Notification出现时的声音,一般不建议自定义
notification.defaults |= Notification.DEFAULT_SOUND;
//设定如何振动
notification.defaults |= Notification.DEFAULT_VIBRATE;
//指定Flag,Notification.FLAG_AUTO_CANCEL意指点击这个Notification后,立刻取消自身
//这符合一般的Notification的运作规范
notification.flags|=Notification.FLAG_AUTO_CANCEL;
notification.setLatestEventInfo(this, contentTitle, contentText, contentIntent);
//显示这个notification
mNotificationManager.notify(HELLO_ID, notification);
这是最基本的应用,可以说除了找个合适的图标以外,其它都很简单。

使用自定义View的Notification
同Toast一样,我们也可以自已指定1个View来作为Notification展开后的显示内容,比如说在Android Market中下载的时候,Notification中会显示当前下载的进度,那么我们也来模拟1个这样的效果吧。
首先给出View的定义文件:notification_view_sample.xml
  <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="3dp"
>
<ImageView android:id="@+id/notificationImage"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:src="@android:drawable/stat_sys_download"
/>
<TextView android:id="@+id/notificationTitle"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_toRightOf="@id/notificationImage"
android:layout_alignParentRight="true"
android:paddingLeft="6dp"
android:textColor="#FF000000"
/>
<TextView android:id="@+id/notificationPercent"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_below="@id/notificationImage"
android:paddingTop="2dp"
android:textColor="#FF000000"
/>
<ProgressBar android:id="@+id/notificationProgress"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_below="@id/notificationTitle"
android:layout_alignLeft="@id/notificationTitle"
android:layout_alignParentRight="true"
android:layout_alignTop="@id/notificationPercent"
android:paddingLeft="6dp"
android:paddingRight="3dp"
android:paddingTop="2dp"
style="?android:attr/progressBarStyleHorizontal"
/>
</RelativeLayout>
RelativeLayout的使用,可以参考:《教程:Android各种Layout特性和使用汇总(一)》本回答被提问者和网友采纳

android中怎么让menu菜单显示在屏幕左上角
android 中让菜单menu显示在左上角,可以使用popupwindow技术,也就是悬浮菜单,设置默认的位置为左上角,如下代码:package com.example.menutype;import android.app.ActionBar.LayoutParams;import android.app.Activity;import android.content.Context;import android.os.Bundle;import android.view.Gravity;i...

Android开发 怎么设置菜单选项固定在上方
一般人创建菜单,都是使用oncreateoptionmenu或onpreparemenu,其实呢,还有两个方法,是用来确定menu的位置及显示的:onopenmenu和onCreatePanelView,你要是理解好了这俩接口就能实现你要的功能。如果理解不了上面的方法,你就是使用自定义标题栏加popupwindow来实现,这个肯定能理解吧 ...

android如何在系统导航栏旁显示menu按键
要想让menu按键显示在系统导航栏旁,需要改变AndroidManifest内的 内的最小sdk版本。最高为10,不得高于10,否则无法现实在系统导航栏旁。个人想法是:Android3.0后加入了ActionBar控件和虚拟的按键,而ActionBar整合了menu功能导致android3.0以上的menu按钮只能现实在ActionBar上,无法显示在系统导航栏旁。

android如何使底部菜单在弹出时显示在tab标签的上方(覆盖掉tab标签)_百...
自己定义一个、布局 然后拦截menu事件 弹出就可以了 自定义menu 步骤:1) 覆写onCreateOptionsMenu(),返回值改为false public boolean onCreateOptionsMenu(Menu menu) { return false;} 2) 创建 *\/ View contentView = LayoutInflater.from(this).inflate(R.layout.menu,null);view = contentView....

怎么让android系统中隐藏的menu按钮显示出来
public boolean onPrepareOptionsMenu(Menu menu):选项菜单显示之前onPrepareOptionsMenu方法会被调用,你可以用此方法来根据打当时的情况调整菜单。public boolean onMenuOpened(int featureId, Menu menu):单打开后发生的动作。二、默认样式默认样式是在屏幕底部弹出一个菜单,这个菜单我们就叫他选项菜单...

关于Option Menu的显示位置,该怎么处理
然后显示的位置是右上角,而且图片没有显示)---解决方法--- 那你的Android版本肯定是API 3.0以上了,默认是在上面。你可以在Manifest中的Application标签下加上: android:theme="@android:style\/Theme",就回归到以前的版本了。显示在下方,图片也出来了 ...

android 怎么把statuebar移动到左边
我们使用的大多数android手机上的Home键,返回键以及menu键都是实体触摸感应按键。如果你用Google的Nexus4或Nexus5话,你会发现它们并没有实体按键或触摸感应按键,取而代之的是在屏幕的下方加了一个小黑条,在这个黑条上有3个按钮控件,这种设置无疑使得手机的外观的设计更加简约。但我遇到身边用Nexus ...

安卓界面布局怎么调整安卓界面布局
首先打开layout,在src-》main-》res-》layout下,这是安卓app的界面设计文件,所有的界面都可以通过这里的xml文件生成 4 双击xml文件打开设计界面,关于layout的具体设计以后再讲,这里仅介绍如何打开layout。5 项目的菜单设计在menu项下的xml文件中定义和设计。6 字符串文件也是项目中重要的文件,在app...

android menu 有什么用
android 中的menu一般是指上下文菜单或者是选项菜单其中上选项菜单是可以在布局中res下的menu中在xml布局中写好布局来的然后通过java代码中的onCreateOptionsMenu来加载选项菜单,android4.4高级版本后是自动把菜单加载到标题栏上的,而不是低版本的按下menu键才显是出来的,上下文菜单是是通过onCreate...

android 菜单 怎么让同一个选项菜单在任何一个页面都能显示
单独写一个菜单的menu.xml,建一个Menu的类setcontentview(R.layout.menu),在Menu类里初始化控件,写监听事件等,在每个要弹菜单的类中new Menu();

相似回答