您的位置:首页 > 移动开发 > Android开发

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

2015-03-19 11:50 423 查看
在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;
}
}

}


效果图:



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐