现在的位置: 首页 > 综合 > 正文

ListActivity与Menu

2013年10月08日 ⁄ 综合 ⁄ 共 5488字 ⁄ 字号 评论关闭

默认的 setListAdapter(adapter),它是使用系统默认的id 必须是"@+id/android:list"不能使用其它的
当自定义id时,程序里就不能直接 setListAdapter(adapter),想用其他的ID 你可以直接用Activity。

 

在ListActivity中,创建菜单功能(重写onCreateOptionsMenu()和onOptionsItemSelected()方法)
以及使用ArrayAdapter<String>与setListAdapter();main.xml中无LinearLayout或ListView描述。
无setContentView(R.layout.main);
eg.
<?xml version="1.0" encoding="utf-8"?>
<TextView
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/myTextView1"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:text="@string/hello"
/>
当然,如想自定义ListActivity的布局文件 ,只需在onCreate()方法里加入setContentView(R.layout.main);
但请留意,布局文件里必须包含Widget,eg.
<ListView
  android:id="@+id/android:list"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:layout_weight="1"
  android:drawSelectorOnTop="false"
/>

Android提供了三种基础菜单类型:
 
选项菜单Options Menu
上下文菜单Context Menu
子菜单Submenu

选项菜单Options Menu
/* Creates the Options  menu items */   
    public boolean onCreateOptionsMenu(Menu menu) {       
        menu.add(groupId, itemId0, order, "title");//groupId一组菜单,itemId0为按Menu键后显示的菜单列项中的某列   
menu.add(groupId,itemId1,order,title);//order添加时的顺序排列.title为按Menu键后显示的菜单项的名字,可以是一个字符串资源 
        return true;   
    }     
    /* Handle item selections */   
    public boolean onOptionsItemSelected(MenuItem item) {       
        switch (item.getItemId()) {       
        case itemId0:           
            newGame();           
                
        case itemId1:           
            quit();           
                 
        }       
          
       return super.onOptionsItemSelected(item);   
    } 

增加图标
图标也可以通过setIcon()函数被添加到菜单项中。
setIcon(R.drawable.menu_quit_icon);

修改菜单

上下文菜单Context Menu
Android的上下文菜单在概念上和PC软件的右键菜单类似。
按住不动差不多两秒钟)动作,将出现一个提供相关功能的浮动菜单
final int EDIT_ID = 0;  
    final int DELETE_ID = 1;  
      
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {     
        super.onCreateContextMenu(menu, v, menuInfo);     
        menu.setHeaderTitle("asd");  
        menu.add(0, EDIT_ID, 0, "Edit");     
        menu.add(0, DELETE_ID, 0,  "Delete");   
    }   
      
    public boolean onContextItemSelected(MenuItem item) {     
        AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();     
        switch (item.getItemId()) {     
        case EDIT_ID:       
                
            return true;     
        case DELETE_ID:       
                   
            return true;     
        default:       
            return super.onContextItemSelected(item);     
        }   
    } 

子菜单Submenus
public boolean onCreateOptionsMenu(Menu menu) {     
        boolean result = super.onCreateOptionsMenu(menu);       
        SubMenu fileMenu = menu.addSubMenu("File");     
        SubMenu editMenu = menu.addSubMenu("Edit");     
        fileMenu.add("new");     
        fileMenu.add("open");     
        fileMenu.add("save");     
        editMenu.add("undo");     
        editMenu.add("redo");       
        return result;   
    } 
子菜单中的选择将由onOptionsItemSelected() 回调处理。

在XML里定义菜单Define Menus in XML:
首先在目录res/menu/里创建一个名为options_menu.xml 的文件。
view plaincopy to clipboardprint?
<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:id="@+id/menu_save" 
          android:icon="@drawable/ic_menu_save" 
          android:alphabeticShortcut='s' 
          android:title="@string/menu_save" /> 
    <group android:id="@+id/menu_group_edit"> 
        <item android:id="@+id/menu_revert" 
              android:icon="@drawable/ic_menu_revert" 
              android:title="@string/menu_revert" /> 
        <item android:id="@+id/menu_delete" 
              android:icon="@drawable/ic_menu_delete" 
              android:title="@string/menu_delete" /> 
    </group> 
    <group android:id="@+id/menu_group_insert"> 
        <item android:id="@+id/menu_discard" 
              android:icon="@drawable/ic_menu_discard" 
              android:title="@string/menu_discard" /> 
    </group> 
</menu> 
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/menu_save"
          android:icon="@drawable/ic_menu_save"
          android:alphabeticShortcut='s'
          android:title="@string/menu_save" />
    <group android:id="@+id/menu_group_edit">
        <item android:id="@+id/menu_revert"
              android:icon="@drawable/ic_menu_revert"
              android:title="@string/menu_revert" />
        <item android:id="@+id/menu_delete"
              android:icon="@drawable/ic_menu_delete"
              android:title="@string/menu_delete" />
    </group>
    <group android:id="@+id/menu_group_insert">
        <item android:id="@+id/menu_discard"
              android:icon="@drawable/ic_menu_discard"
              android:title="@string/menu_discard" />
    </group>
</menu> 
然后,在onCreateOptionsMenu()方法里,我们通过MenuInflater.inflate()方法扩充这个资源:
 
view plaincopy to clipboardprint?
@Override 
    public boolean onCreateOptionsMenu(Menu menu) {  
        // Inflate menu from XML resource  
        MenuInflater inflater = getMenuInflater();  
        inflater.inflate(R.menu.editor_options_menu, menu);  
 
        // Append to the  
        // menu items for any other activities that can do stuff with it  
        // as well.  This does a query on the system for any activities that  
        // implement the ALTERNATIVE_ACTION for our data, adding a menu item  
        // for each one that is found.  
        Intent intent = new Intent(null, getIntent().getData());  
        intent.addCategory(Intent.CATEGORY_ALTERNATIVE);  
        menu.addIntentOptions(Menu.CATEGORY_ALTERNATIVE, 0, 0,  
                new ComponentName(this, NoteEditor.class), null, intent, 0, null);  
 
        return super.onCreateOptionsMenu(menu);  
    } 

抱歉!评论已关闭.