Android学习之menu菜单使用与用户自定义View

本文介绍了如何在Android项目中创建和自定义menu菜单,包括在res目录下新建menu资源,XML中定义菜单项,并在MainActivity中实现onCreateOptionsMenu和onOptionsItemSelected方法。同时,文章还展示了如何制作一个通用的导航条布局,包括返回按钮、标题显示和主页按钮,通过include标签在其他布局中复用。最后,提到了在子活动中实现导航条按钮功能的细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在eclipse中新建一个安卓项目的时候,一般会自带创建一个menu,如果想自定义一个menu的话,在项目res目录下新建一个menu菜单,然后在该目录下新建一个xml文件,系统根目录会自动选择为menu类型;



新建成功后,我们在xml中添加菜单项Item;

<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@+id/add_item"
        android:title="Add"/>
    <item 
        android:id="@+id/remove_item"
        android:title="Remove"
        />
</menu>


回到MainActivity当中,实现菜单创建和菜单选择方法实现;onCreateOptionsMenu和onOptionsItemSelected;

onCreateOptionsMenu和Activity中的onCreate方法类似,获取MenuInflater对象,加载menu类型的main.xml视图文件到menu对象中,这种方法和ListView当中LayoutInflater加载子视图操作很相似!注意return true,表明菜单被调用后会显示出来,否则不会显示;单击模拟器上menu图标,菜单就会显示出来了!默认菜单的样式与当前安卓版本有关

	//创建菜单
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
       getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}
	
	//选择菜单
	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
			switch (item.getItemId()) {
			case R.id.add_item:
				Toast.makeText(this, "你点击了添加菜单项按钮", Toast.LENGTH_SHORT).show();
				break;
			case R.id.remove_item:
				Toast.makeText(this, "你点击了删除菜单项按钮", Toast.LENGTH_SHORT).show();
				break;
			}
		
		return true;
	}




下面看看自定义view,这里做一个新闻详情页的导航条部分,包括返回上一级按钮,文本标题显示和回到主页按钮;单独做一个布局文件title.xml;然后其他布局中利用include来调用这个导航条布局,基本上就实现了通用导航条效果!

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/title_bg"
    android:orientation="horizontal" >
    <Button 
        android:id="@+id/title_back"
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:layout_gravity="center"
        android:background="@drawable/title_back"
        
        />
    
    <TextView 
        android:id="@+id/title_text"
        android:layout_width="0dip"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:layout_marginLeft="15dp"
        android:layout_weight="1"
        android:singleLine="true"
        android:ellipsize="end"
        android:text="英国加入亚投行,西方国家效仿,美国阻击战略失败"
        android:textColor="#fff"
        
        />
    
     <Button 
        android:id="@+id/title_index"
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:layout_gravity="center"
        android:background="@drawable/title_index"
       
        />

</LinearLayout>


由于涉及到返回键,所以在子活动中引入导航条实现按钮功能,主活动中通过意图对象进入子活动;子活动中实现导航按钮功能

完成主活动功能:


主布局文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.menu.MainActivity" >


   <Button 
       android:id="@+id/enter"
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       android:text="进入"
       />

</LinearLayout>

自布局文件:


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
        <include  layout="@layout/title"/>
    
        <TextView 
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:textSize="16sp"
            android:textStyle="normal"
            android:layout_marginTop="15dp"
            android:layout_marginLeft="15dp"
            android:layout_marginRight="15dp"
            android:lineSpacingExtra="10dp"
            android:text="中国日报网12月11日电(远达)由中国倡导设立的亚洲基础设施投资银行蓄势待发,不少国家摩拳擦掌、踊跃参与,但也有彷徨徘徊者,有的甚至心生疑忌,视之为对亚太金融格局的挑战,认为亚投行要与世行、亚行分庭抗礼。"
            />
</LinearLayout>


主活动代码:

package com.example.menu;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener{
    private Button enter;
    private Intent intent=null;
	@Override
	protected void onCreate(Bundle savedInstanceState){
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		initView();
	}
	
	private void initView(){
		enter= (Button) findViewById(R.id.enter);
		enter.setOnClickListener(this);
	}
	


	
	
	//创建菜单
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
       getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}
	
	//选择菜单
	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
			switch (item.getItemId()) {
			case R.id.add_item:
				Toast.makeText(this, "你点击了添加菜单项按钮", Toast.LENGTH_SHORT).show();
				break;
			case R.id.remove_item:
				Toast.makeText(this, "你点击了删除菜单项按钮", Toast.LENGTH_SHORT).show();
				break;
			}
		
		return true;
	}

	public void onClick(View v) {
		if(v.getId()==R.id.enter){
			Toast.makeText(this, "进入另一个活动", Toast.LENGTH_SHORT).show();
			intent =new Intent(this,SecondActivity.class);
			startActivity(intent);
		}
	}

	

	
}

子活动代码:


package com.example.menu;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class SecondActivity extends Activity implements OnClickListener{
	 Button tittle_back,tittle_index;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_second);
		initView();
	}
	
	private void initView(){
		tittle_back= (Button) findViewById(R.id.title_back);
		tittle_index=(Button) findViewById(R.id.title_index);
		tittle_back.setOnClickListener(this);
		tittle_index.setOnClickListener(this);
	}
	
	public void onClick(View v) {
		
		switch (v.getId()) {
		case R.id.title_back:
			finish();
			break;
		case R.id.title_index:
			Intent intent =new Intent(this,MainActivity.class);
			startActivity(intent);
			break;
		}
	}

}


效果图:







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值