public class ActionBarDisplayOptions extends Activity implements View.OnClickListener, ActionBar.TabListener { private View mCustomView;
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.action_bar_display_options);
findViewById(R.id.toggle_home_as_up).setOnClickListener(this); findViewById(R.id.toggle_show_home).setOnClickListener(this); findViewById(R.id.toggle_use_logo).setOnClickListener(this); findViewById(R.id.toggle_show_title).setOnClickListener(this); findViewById(R.id.toggle_show_custom).setOnClickListener(this); findViewById(R.id.toggle_navigation).setOnClickListener(this); findViewById(R.id.cycle_custom_gravity).setOnClickListener(this);
mCustomView = getLayoutInflater().inflate(R.layout.action_bar_display_options_custom, null); final ActionBar bar = getActionBar(); bar.setCustomView(mCustomView, new ActionBar.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
bar.addTab(bar.newTab().setText("Tab 1").setTabListener(this)); bar.addTab(bar.newTab().setText("Tab 2").setTabListener(this)); bar.addTab(bar.newTab().setText("Tab 3").setTabListener(this)); }
@Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.display_options_actions, menu); return true; }
public void onClick(View v) { final ActionBar bar = getActionBar(); int flags = 0; switch (v.getId()) { case R.id.toggle_home_as_up: flags = ActionBar.DISPLAY_HOME_AS_UP; break; case R.id.toggle_show_home: flags = ActionBar.DISPLAY_SHOW_HOME; break; case R.id.toggle_use_logo: flags = ActionBar.DISPLAY_USE_LOGO; break; case R.id.toggle_show_title: flags = ActionBar.DISPLAY_SHOW_TITLE; break; case R.id.toggle_show_custom: flags = ActionBar.DISPLAY_SHOW_CUSTOM; break;
case R.id.toggle_navigation: bar.setNavigationMode( bar.getNavigationMode() == ActionBar.NAVIGATION_MODE_STANDARD ? ActionBar.NAVIGATION_MODE_TABS : ActionBar.NAVIGATION_MODE_STANDARD); return; case R.id.cycle_custom_gravity: ActionBar.LayoutParams lp = (ActionBar.LayoutParams) mCustomView.getLayoutParams(); int newGravity = 0; switch (lp.gravity & Gravity.HORIZONTAL_GRAVITY_MASK) { case Gravity.LEFT: newGravity = Gravity.CENTER_HORIZONTAL; break; case Gravity.CENTER_HORIZONTAL: newGravity = Gravity.RIGHT; break; case Gravity.RIGHT: newGravity = Gravity.LEFT; break; } lp.gravity = lp.gravity & ~Gravity.HORIZONTAL_GRAVITY_MASK | newGravity; bar.setCustomView(mCustomView, lp); return; }
int change = bar.getDisplayOptions() ^ flags; bar.setDisplayOptions(change, flags); }
public void onTabSelected(Tab tab, FragmentTransaction ft) { }
public void onTabUnselected(Tab tab, FragmentTransaction ft) { }
public void onTabReselected(Tab tab, FragmentTransaction ft) { } }
接下来是文中涉及的3个xml布局文件:
相关的XML布局action_bar_display_options.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"> <Button android:id="@+id/toggle_home_as_up" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/toggle_home_as_up" /> <Button android:id="@+id/toggle_show_home" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/toggle_show_home" /> <Button android:id="@+id/toggle_use_logo" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/toggle_use_logo" /> <Button android:id="@+id/toggle_show_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/toggle_show_title" /> <Button android:id="@+id/toggle_show_custom" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/toggle_show_custom" /> <Button android:id="@+id/toggle_navigation" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/toggle_navigation" /> <Button android:id="@+id/cycle_custom_gravity" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/cycle_custom_gravity" /> </LinearLayout>
相关的自定义布局文件action_bar_display_options_custom.xml代码为
<?xml version="1.0" encoding="utf-8"?>
<Button xmlns:android="http://schemas.android.com/apk/res/android" android:text="@string/display_options_custom_button" />
相关的menu布局xml文件display_options_actions.xml代码为
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/simple_item" android:title="@string/display_options_menu_item" /> </menu>
上面的string后的元素大家可以根据自己的情况进行替换。