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"
/>