在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;
}
}
}
效果圖: