android Activity类

 

1)Activity中添加Menu的方法

方法一,通过xml文件添加静态菜单:

在res/menu目录下定义一个menulayout.xml文件,内容如下:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
	<item android:id="@+id/add" android:title="@string/add"
		android:enabled="false" android:icon="@android:drawable/ic_menu_add" />
	<item android:id="@+id/edit" android:title="@string/edit"
		android:icon="@android:drawable/ic_menu_edit" />
</menu>


然后在Activity中重写相应的方法:

	@Override
	public boolean onCreateOptionsMenu(Menu arg0) {
		getMenuInflater().inflate(R.menu.menulayout, arg0);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		switch (item.getItemId()) {
		case R.id.add:
			Toast.makeText(this, "add", Toast.LENGTH_LONG).show();
			break;
		case R.id.edit:
			Toast.makeText(this, "edit", Toast.LENGTH_LONG).show();
			break;
		}
		return true;
	}

	@Override
	public boolean onPrepareOptionsMenu(Menu menu) {
		menu.findItem(R.id.add).setEnabled(true);
		return true;
	}

 

通过xml文件添加父子级别Menu:

在res/menu目录下定义一个menulayout.xml文件,内容如下:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
	<item android:id="@+id/add" android:title="@string/add"
		android:enabled="false" android:icon="@android:drawable/ic_menu_add" />
	<item android:id="@+id/edit" android:title="@string/edit"
		android:icon="@android:drawable/ic_menu_edit" />
	<item android:id="@+id/more" android:title="@string/more"
		android:icon="@android:drawable/ic_menu_more">
		<menu>
			<item android:id="@+id/moreone" android:title="@string/moreone"></item>
			<item android:id="@+id/moretwo" android:title="@string/moretwo"></item>
		</menu>
	</item>
</menu>


然后在Activity中重写相应的方法:

@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.menulayout, menu);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		switch (item.getItemId()) {
		case R.id.add:
			Toast.makeText(this, "add", Toast.LENGTH_LONG).show();
			break;
		case R.id.edit:
			Toast.makeText(this, "edit", Toast.LENGTH_LONG).show();
			break;
		case R.id.moreone:
			Toast.makeText(this, "moreone", Toast.LENGTH_LONG).show();
			break;
		case R.id.moretwo:
			Toast.makeText(this, "moretwo", Toast.LENGTH_LONG).show();
			break;
		case R.id.more:
			Toast.makeText(this, "more", Toast.LENGTH_LONG).show();
			break;
		}
		return true;
	}

	@Override
	public boolean onPrepareOptionsMenu(Menu menu) {
		menu.findItem(R.id.moreone).setEnabled(false);
		return true;
	}



方法二,在Activity中动态创建Menu:

//定义MenuItem的ID
	private static final int MENU_ADD = Menu.FIRST;
	private static final int MENU_EDIT = Menu.FIRST + 1;


然后重写相应的方法:

@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		menu.add(0, MENU_ADD, 0, "Add").setIcon(android.R.drawable.ic_menu_add).setEnabled(false);
		menu.add(0, MENU_EDIT, 0, "Edit").setIcon(android.R.drawable.ic_menu_edit);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		switch (item.getItemId()) {
		case MENU_ADD:
			Toast.makeText(this, "add", Toast.LENGTH_LONG).show();
			break;
		case MENU_EDIT:
			Toast.makeText(this, "edit", Toast.LENGTH_LONG).show();
			break;
		}
		return true;
	}

	@Override
	public boolean onPrepareOptionsMenu(Menu menu) {
		menu.getItem(MENU_ADD).setEnabled(true);//无法获得item,不能修改enable值
		menu.findItem(MENU_ADD).setEnabled(true);//无法获得item,不能修改enable值
		menu.clear();
		menu.add(0, MENU_ADD, 0, "Add").setIcon(android.R.drawable.ic_menu_add);
		menu.add(0, MENU_EDIT, 0, "Edit").setIcon(android.R.drawable.ic_menu_edit);
		return true;
	}

注:可以通过Activity的openOptionsMenu()方法来触发Menu事件。 

 

 2) Activity中添加上下文菜单

首先,想要显示ContextMenu(上下文菜单)需要触发View的长按事件,而且其长按事件的返回值必须为false,如果其长按事件的返回值为true,则不会触发onCreateContextMenu回调方法的调用。ContextMenu不支持item shortcuts 和item icons。

需要做的是重写如下几个回调方法:

	@Override
	public void onCreateContextMenu(ContextMenu menu, View v,
			ContextMenuInfo menuInfo) {
		// TODO Auto-generated method stub
		super.onCreateContextMenu(menu, v, menuInfo);
	}

	@Override
	public boolean onMenuItemSelected(int featureId, MenuItem item) {
		// TODO Auto-generated method stub
		return super.onMenuItemSelected(featureId, item);
	}


然后还需要调用Activity的registerForContextMenu方法,来注册触发ContextMenu的View。

下面是一个小例子:

public class HelloWorldActivity extends Activity {
	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		TextView tv = (TextView) findViewById(R.id.text);
		//注册触发ContextMenu的View
		this.registerForContextMenu(tv);
		/**
		 * 如果取消下面这段代码的注释,因为重写了tv的长按事件,并且其长按事件的返回值为true,
		 * 所以长按tv控件不会触发ContextMenu
		 * */
		// tv.setOnLongClickListener(new View.OnLongClickListener() {
		//
		// public boolean onLongClick(View v) {
		// return true;
		// }
		// });

	}

	/**
	 * 当控件触发ContextMenu显示的时候,调用此方法。
	 * */
	@Override
	public void onCreateContextMenu(ContextMenu menu, View v,
			ContextMenuInfo menuInfo) {
		//设置ContextMenu的标题
		menu.setHeaderTitle("ContextMenuTest");
		//设置ContextMenu的标题图标
		menu.setHeaderIcon(R.drawable.ic_launcher);
		//添加条目
		menu.add(1, 0, 0, "Item0");
		menu.add(1, 1, 0, "Item1");
		menu.add(1, 2, 0, "Item2");
		super.onCreateContextMenu(menu, v, menuInfo);
	}
	
	/**
	 * 处理ContextMenu的item点击事件
	 * */

	@Override
	public boolean onMenuItemSelected(int featureId, MenuItem item) {
		switch (item.getItemId()) {
		case 0:
		case 1:
		case 2:
			Toast.makeText(this, item.getTitle(), Toast.LENGTH_SHORT).show();
			break;
		}
		return super.onMenuItemSelected(featureId, item);
	}

}


布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/hello"
		android:id="@+id/text"/>

</LinearLayout>


 3)获取屏幕的宽和高

        getWindowManager().getDefaultDisplay().getWidth();
        getWindowManager().getDefaultDisplay().getHeight();

 

4)标题栏ProgressBar

在使用时我们首先需要在setContentView之前声明

requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); 


在需要显示进度时调用 :

setProgressBarIndeterminateVisibility(true);


停止时调用:

setProgressBarIndeterminateVisibility(false);


效果如图:

 

5)触发menu键

                openOptionsMenu();


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值