AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="hyz.com.actionbar"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="14" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:label="@string/app_name"
android:name=".ActionBarTabs" >
<intent-filter >
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
ActionBarTabs.java
package hyz.com.actionbar;
import android.app.ActionBar;
import android.app.ActionBar.Tab;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;
public class ActionBarTabs extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.action_bar_tabs);
ActionBar bar = getActionBar();
bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
bar.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_TITLE);
//bar.setDisplayOptions(ActionBar.DISPLAY_HOME_AS_UP, ActionBar.DISPLAY_HOME_AS_UP);
String text = "FRAGMENT01" ;
bar.addTab(bar.newTab()
.setText(text)
.setTabListener(new TabListener(new Fragment01())));
text = "FRAGMENT02" ;
bar.addTab(bar.newTab()
.setText(text)
.setTabListener(new TabListener(new Fragment02())));
}
private class TabListener implements ActionBar.TabListener
{
private Fragment mFragment;
public TabListener(Fragment fragment)
{
mFragment = fragment;
}
public void onTabSelected(Tab tab, FragmentTransaction ft)
{
//ft.add(R.id.fragment_content, mFragment, mFragment.getText());
//ft.add(R.id.fragment_content, mFragment); 当横竖切换时,用add会显示多个activity的布局
ft.replace(R.id.fragment_content, mFragment);
}
public void onTabUnselected(Tab tab, FragmentTransaction ft)
{
ft.remove(mFragment);
}
public void onTabReselected(Tab tab, FragmentTransaction ft)
{
Toast.makeText(ActionBarTabs.this, "Reselected!", Toast.LENGTH_SHORT).show();
}
}
//Activity里和Fragment里此函数不一样
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
//menu.add("ActionBarTabs").setIcon(R.drawable.icon).setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_WITH_TEXT);
//通过布局创建菜单
getMenuInflater().inflate(R.menu.menu, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
return super.onOptionsItemSelected(item);
}
}
Fragment01.java
package hyz.com.actionbar;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
public class Fragment01 extends Fragment implements OnClickListener
{
// private String mText;
// public Fragment01(String text)
// {
// mText = text;
// }
// public String getText()
// {
// return mText;
// }
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
//加此句话onCreateOptionsMenu()就能在Fragment中创建菜单了
setHasOptionsMenu(true);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
View fragView = inflater.inflate(R.layout.fragment01, container, false);
Button button = (Button) fragView.findViewById(R.id.fragment01);
button.setOnClickListener(this);
return fragView;
}
@Override
public void onClick(View v)
{
Toast.makeText(getActivity(), "don't click fragment01", Toast.LENGTH_SHORT).show();
}
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
return super.onOptionsItemSelected(item);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater)
{
//直接创建菜单
menu.add("TICKTACK OFF").setIcon(R.drawable.icon).setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_WITH_TEXT);
menu.add("TICKTACK ON").setIcon(R.drawable.icon).setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_WITH_TEXT);
}
}
Fragment02.java
package hyz.com.actionbar;
import android.app.Fragment;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
public class Fragment02 extends Fragment implements OnClickListener
{
// private String mText;
// public Fragment02(String text)
// {
// mText = text;
// }
// public String getText()
// {
// return mText;
// }
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
View fragView = inflater.inflate(R.layout.fragment02, container, false);
Button button = (Button) fragView.findViewById(R.id.fragment02);
button.setOnClickListener(this);
return fragView;
}
@Override
public void onClick(View v)
{
Toast.makeText(getActivity(), "don't click fragment02", Toast.LENGTH_SHORT).show();
}
}
action_bar_tabs.xml
<?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">
<FrameLayout
android:id="@+id/fragment_content"
android:layout_width="match_parent"
android:layout_height="0dip"
android:layout_weight="1" />
</LinearLayout>
fragment01.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="fragment01"/>
<Button
android:id="@+id/fragment01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="click me"
android:layout_toRightOf="@id/text"/>
</RelativeLayout>
fragment02.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="fragment02:"/>
<Button
android:id="@+id/fragment02"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="click me"
android:layout_toRightOf="@id/text"/>
</RelativeLayout>
res/menu/menu.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/add"
android:showAsAction="ifRoom|withText"
android:title="ADD"
android:icon="@drawable/icon"/>
</menu>
补充:
如果要在ActionBar上显示一个EditText,可如下:
private View mCustomView;
bar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM, ActionBar.DISPLAY_SHOW_CUSTOM);
mCustomView = getLayoutInflater().inflate(R.layout.lay, null);
bar.setCustomView(mCustomView, new ActionBar.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
<?xml version="1.0" encoding="utf-8"?>
<EditText
xmlns:android="http://schemas.android.com/apk/res/android"
android:text="dfghjkl"
android:layout_width="450dip"
android:layout_height="wrap_content"
/>