Android仿微信菜單(Menu)(使用C#和Java分別實(shí)現(xiàn))
本篇是對(duì)安卓菜單使用編程方式實(shí)現(xiàn),當(dāng)然可以使用XML的方式完成同樣的功能,基本Java和C#寫法都是一致的,所以使用XML的方式在本篇中使用Java演示,需要注意的是,對(duì)于如果不是VS開(kāi)發(fā)的話,那么資源文件名稱必須以小寫開(kāi)頭,否則會(huì)報(bào)錯(cuò)。
運(yùn)行效果

C#實(shí)現(xiàn)
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);
}
//與一個(gè)活動(dòng)關(guān)聯(lián)
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;
/*
* 第一個(gè)參數(shù):組值
* 第二個(gè)參數(shù):菜單唯一標(biāo)示
* 第三個(gè)參數(shù):順序參數(shù)
* 第四個(gè)參數(shù):文本
*/
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, "當(dāng)前菜單編號(hào)" + 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("子菜單選項(xiàng)");
}
}
}
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>
運(yùn)行效果

Java實(shí)現(xiàn)
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);
}
}
Layout
<?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>
- Android實(shí)現(xiàn)TCP斷點(diǎn)上傳 后臺(tái)C#服務(wù)接收
- 快速解決C# android base-64 字符數(shù)組的無(wú)效長(zhǎng)度問(wèn)題
- C#之Android手機(jī)App開(kāi)發(fā)
- C#開(kāi)發(fā)Android百度地圖手機(jī)應(yīng)用程序(多地圖展示)
- Android下拉列表(Spinner)效果(使用C#和Java分別實(shí)現(xiàn))
- Android相冊(cè)效果(使用C#和Java分別實(shí)現(xiàn))
- C#采用Winform實(shí)現(xiàn)類似Android的Listener
- 詳解C#開(kāi)發(fā)Android應(yīng)用程序的流程
相關(guān)文章
android?studio組件通信:Intend啟動(dòng)Activity接收返回結(jié)果
這篇文章主要介紹了android?studio組件通信:Intend啟動(dòng)Activity接收返回結(jié)果,設(shè)計(jì)一個(gè)主Activity和一個(gè)子Activity(Sub-Activity),使用主Activity上的按鈕啟動(dòng)子Activity,并將子Activity的一些信息返回給主Activity,并顯示在主Activity上,需要的朋友可以參考一下2021-12-12
Android藍(lán)牙庫(kù)FastBle的基礎(chǔ)入門使用
這篇文章主要給大家介紹了關(guān)于Android藍(lán)牙庫(kù)FastBle的基礎(chǔ)入門使用的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-07-07
在Android中訪問(wèn)WebService接口的方法
最近公司有個(gè)項(xiàng)目需要從Android平臺(tái)訪問(wèn)WebService接口,實(shí)現(xiàn)向發(fā)布的函數(shù)傳遞對(duì)象。在網(wǎng)上找了一些資料,發(fā)現(xiàn)使用ksoap2可以調(diào)用WebService傳遞對(duì)象。2013-05-05
android中SwipeRefresh實(shí)現(xiàn)各種上拉,下拉刷新示例
這篇文章主要介紹了android中SwipeRefresh實(shí)現(xiàn)各種上拉,下拉刷新示例,非常具有實(shí)用價(jià)值,需要的朋友可以參考下。2017-03-03
Android獲取和讀取短信驗(yàn)證碼的實(shí)現(xiàn)方法
這篇文章主要介紹了Android獲取和讀取短信驗(yàn)證碼的實(shí)現(xiàn)方法,文章內(nèi)容介紹了如何讀取剛收到的短信的相關(guān)內(nèi)容,以及Android獲取短信驗(yàn)證碼的方法,感興趣的小伙伴們可以參考一下2016-03-03
Android控件RecyclerView實(shí)現(xiàn)混排效果仿網(wǎng)易云音樂(lè)
這篇文章主要為大家詳細(xì)介紹了Android控件RecyclerView實(shí)現(xiàn)混排效果,仿網(wǎng)易云音樂(lè),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10
Android實(shí)現(xiàn)蝸牛進(jìn)度條效果
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)蝸牛進(jìn)度條效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06
Android自定義View實(shí)現(xiàn)分段選擇按鈕的實(shí)現(xiàn)代碼
這篇文章主要介紹了Android自定義View實(shí)現(xiàn)分段選擇按鈕的實(shí)現(xiàn)代碼,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12

