今天找到了实现actionbar里面按钮下拉菜单的实现方法。使用PopupWindow即可。源码如下:
package com.bruce.actionbarlist;
import android.app.Activity;
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.widget.PopupWindow;
public class MainActivity extends Activity {
View main;
PopupWindow popupWindow;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//listView = (ListView)findViewById(R.id.add_list);
main = findViewById(R.id.main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
switch(item.getItemId()){
case R.id.add:
showActionbarList();
}
return true;
}
private void showActionbarList(){
if(null == popupWindow){
//ListAdapter adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,R.array.names);
//listView.setAdapter(adapter);
View layout = LayoutInflater.from(this).inflate(R.layout.add_list, null);
int w = main.getWidth();
int h = main.getHeight();
popupWindow = new PopupWindow(layout, w/4, h, true);
popupWindow.setBackgroundDrawable(getResources().getDrawable(R.drawable.transparent));
}
int[] pos = new int[2];
main.getLocationOnScreen(pos);
popupWindow.showAtLocation(main, Gravity.RIGHT|Gravity.TOP, pos[0], pos[1]);
}
}
其中的popupWindow的setBackgroundDrawable方法必需要实现,不然listview弹出来以后,整个Activity就会死掉。