Android-Menu [使用C# And Java實現]

Halower發表於2015-03-23

本篇是對安卓選單使用程式設計方式實現,當然可以使用XML的方式完成同樣的功能,基本Java和C#寫法都是一致的,所以使用XML的方式在本篇中使用Java演示,需要注意的是,對於如果不是VS開發的話,那麼資原始檔名稱必須以小寫開頭,否則會報錯。

執行效果

C#實現

using Android.App;
using Android.OS;
using Android.Views;
using Android.Widget;

namespace MenuDemo
{
    [Activity(Label = "@string/ApplicationName", MainLauncher = true, Icon = "@drawable/Icon")]
    public class MainActivity : Activity
    {
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);

            SetContentView(Resource.Layout.Main);
            var iv = FindViewById<ImageView>(Resource.Id.iv);
            iv.SetImageResource(Resource.Drawable.test);
            RegisterForContextMenu(iv);
        }
        //與一個活動關聯
        public override bool OnCreateOptionsMenu(IMenu menu)
        {
            base.OnCreateOptionsMenu(menu);
            const int menuItemId = Menu.First;
            const int menuItemOrder = Menu.None;
            const int munuItemText = Resource.String.menuItem1;
            /*
             * 第一個引數:組值
             * 第二個引數:選單唯一標示
             * 第三個引數:順序引數
             * 第四個引數:文字
             */
            menu.Add(1, menuItemId, menuItemOrder, munuItemText);
            menu.Add(2, menuItemId + 10, menuItemOrder + 1, "選單2");
            menu.Add(2, menuItemId + 20, menuItemOrder + 2, "選單3" );
            var subMenu = menu.AddSubMenu(0, menuItemId + 30, menuItemOrder + 3, "子選單" );
            subMenu.SetHeaderIcon(Resource.Drawable.more);
            var subMenuItem1 = subMenu.Add(0, menuItemId + 40, menuItemOrder + 4,"子選單-1" );
            subMenuItem1.SetIcon(Resource.Drawable.more);
            var subMenuItem2 = subMenu.Add(0, menuItemId + 50, menuItemOrder + 5,"子選單-2" ).SetCheckable(true);
            subMenuItem2.SetIcon(Resource.Drawable.blue);
            subMenu.Add(0, menuItemId + 60, menuItemOrder + 6, "子選單-3" ).SetCheckable(true);
            return true;
        }

        public override bool OnOptionsItemSelected(IMenuItem item)
        {
            Toast.MakeText(this, "當前選單編號" + item.ItemId, ToastLength.Long).Show();
            return base.OnOptionsItemSelected(item);
        }


        public override void OnCreateContextMenu(IContextMenu menu, View v, IContextMenuContextMenuInfo menuInfo)
        {
            base.OnCreateContextMenu(menu, v, menuInfo);
            menu.SetHeaderTitle("上下文選單");
            menu.SetHeaderIcon(Resource.Drawable.blue);
            menu.Add(0, Menu.First, Menu.None, "選單1");
            menu.Add(0, Menu.First+1,Menu.None, "選單2").SetShortcut('2','B');
            menu.Add(0, Menu.First + 2, Menu.None, "選單3");
            var subMenu = menu.AddSubMenu("子選單");
            subMenu.Add("子選單選項");
        }
    }
}

Layout

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:minWidth="25px"
    android:minHeight="25px">
    <ImageView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/iv" />
</LinearLayout>

執行效果

 Java實現

package com.example.halower.menudemo;

import android.app.Activity;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.MenuInflater;
import android.view.View;
import android.widget.ImageView;


public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ImageView iv=(ImageView)findViewById(R.id.iamgeView);
        iv.setImageResource(R.drawable.test);
        registerForContextMenu(iv);
    }

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
        MenuInflater inflater=new MenuInflater(this);
        inflater.inflate(R.menu.menu_main,menu);
        menu.setHeaderIcon(R.drawable.blue);
        menu.setHeaderTitle(R.string.menuTitle);
    }
}
<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">MenuDemo</string>
    <string name="action_settings">Settings</string>
    <string name="item1Name" >選單1</string>
    <string name="item2Name" >選單2</string>
    <string name="item3Name" >選單3--More</string>
    <string name="item4Name" >選單4</string>
    <string name="menuTitle">XML中解析選單</string>
    <string name="subitem1Name">子選單1</string>
    <string name="subitem2Name">子選單2</string>
</resources>

 

相關文章