在Android 3.0後的版本,硬體Menu鍵會消失

進而轉變成Contextual Menu 

設計了一款利用PopupWindow模擬的menu,可以相容於API 10以上(應該可以更低,不過我懶得去一一查)

我先把code列出來,以後在整理註解囉(pixnet對code的排列不是很友善 Orz)

以下就是code 

 

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.content.Intent;
import android.util.TypedValue;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.PopupWindow;

public class ContextualMenuWindow extends PopupWindow implements OnItemClickListener
{
private LinearLayout llMenuContainer;
private ListView lvMenu;
private List<IntentMenuItem> menuItems = new ArrayList<IntentMenuItem>();

private Activity activity;

private void createUI()
{
llMenuContainer = new LinearLayout(activity);
lvMenu = new ListView(activity);
LayoutParams params = new LayoutParams(200, LayoutParams.WRAP_CONTENT);
lvMenu.setLayoutParams(params);
llMenuContainer.addView(lvMenu);
}

private void loadUI()
{
llMenuContainer = (LinearLayout)activity.getLayoutInflater().inflate(R.layout.contextual_menu, null);
lvMenu = (ListView)llMenuContainer.findViewById(R.id.lvMenu);
}

public ContextualMenuWindow(Activity activity)
{
super(activity);

this.activity = activity;

//createUI();
loadUI();

ArrayAdapter<IntentMenuItem> listItemAdapter = new ArrayAdapter<IntentMenuItem>(activity, android.R.layout.simple_list_item_1, menuItems);

lvMenu.setAdapter(listItemAdapter);

lvMenu.setOnItemClickListener(this);

setContentView(llMenuContainer);
setFocusable(true);
setWindowLayoutMode(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
}

public void addIntentItem(String label, Intent intent, int requestCode)
{
menuItems.add(new IntentMenuItem(label, intent, requestCode));
}

@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
{
this.dismiss();
IntentMenuItem item = menuItems.get(position);
if(item.requestCode >= 0)
activity.startActivityForResult(item.intent, item.requestCode);
else
activity.startActivity(item.intent);

}

class IntentMenuItem
{
String label;
Intent intent;
int requestCode = -1;

public IntentMenuItem(String label, Intent intent, int requestCode)
{
this.label = label;
this.intent = intent;
this.requestCode = requestCode;
}

@Override
public String toString()
{
return label;
}
}
}

arrow
arrow
    全站熱搜

    西西 發表在 痞客邦 留言(0) 人氣()