展会信息港展会大全

Android Action Bar 示例代码
来源:互联网   发布日期:2015-09-29 10:46:18   浏览:903次  

导读:今天一起来看下Android Action Bar的示例代码,我们通过活动栏做一个简单选项菜单。下面这个例子将演示ActionBar.NAVIGATION_MODE_STANDARD、 ActionBar.NAVIGATION_MODE_TABS和 : ActionBar.NAVIGATION_MO......

今天一起来看下Android Action Bar的示例代码,我们通过活动栏做一个简单选项菜单。下面这个例子将演示ActionBar.NAVIGATION_MODE_STANDARD、 ActionBar.NAVIGATION_MODE_TABS和 : ActionBar.NAVIGATION_MODE_STANDARD等模式的效果。最后仍然要提示大家Action Bar是Android 3.0 honeycomb才开始有的特性,老版本的SDK和固件无法使用。

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后的元素大家可以根据自己的情况进行替换。

ActionBar相关的示例代码第二部分分为两种,作为Android 3.0的重要特性我们直接看代码:

一、使用菜单资源构造

public class ActionBarMechanics extends Activity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

getWindow().requestFeature(Window.FEATURE_ACTION_BAR);

}

@Override

public boolean onCreateOptionsMenu(Menu menu) {

menu.add("Normal item");

MenuItem actionItem = menu.add("Action Button");

actionItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);

actionItem.setIcon(android.R.drawable.ic_menu_share);

return true;

}

@Override

public boolean onOptionsItemSelected(MenuItem item) {

Toast.makeText(this, "Selected Item: " + item.getTitle(), Toast.LENGTH_SHORT).show();

return true;

}

}

二、作为Tab切换Fragment

public class ActionBarTabs extends Activity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.action_bar_tabs);

}

public void onAddTab(View v) {

final ActionBar bar = getActionBar();

final int tabCount = bar.getTabCount();

final String text = "Tab " + tabCount;

bar.addTab(bar.newTab()

.setText(text)

.setTabListener(new TabListener(new TabContentFragment(text))));

}

public void onRemoveTab(View v) {

final ActionBar bar = getActionBar();

bar.removeTabAt(bar.getTabCount() - 1);

}

public void onToggleTabs(View v) {

final ActionBar bar = getActionBar();

if (bar.getNavigationMode() == ActionBar.NAVIGATION_MODE_TABS) {

bar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);

bar.setDisplayOptions(ActionBar.DISPLAY_SHOW_TITLE, ActionBar.DISPLAY_SHOW_TITLE);

} else {

bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

bar.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_TITLE);

}

}

public void onRemoveAllTabs(View v) {

getActionBar().removeAllTabs();

}

private class TabListener implements ActionBar.TabListener {

private TabContentFragment mFragment;

public TabListener(TabContentFragment fragment) {

mFragment = fragment;

}

public void onTabSelected(Tab tab, FragmentTransaction ft) {

ft.add(R.id.fragment_content, mFragment, mFragment.getText());

}

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();

}

}

private class TabContentFragment extends Fragment {

private String mText;

public TabContentFragment(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.action_bar_tab_content, container, false);

TextView text = (TextView) fragView.findViewById(R.id.text);

text.setText(mText);

return fragView;

}

}

}

涉及的布局文件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 android:layout_width="match_parent"

android:layout_height="0dip"

android:layout_weight="1"

android:orientation="vertical">

<Button android:id="@+id/btn_add_tab"

; android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/btn_add_tab"

; android:onClick="onAddTab" />

<Button android:id="@+id/btn_remove_tab"

; android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/btn_remove_tab"

; android:onClick="onRemoveTab" />

<Button android:id="@+id/btn_toggle_tabs"

; android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/btn_toggle_tabs"

; android:onClick="onToggleTabs" />

<Button android:id="@+id/btn_remove_all_tabs"

; android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/btn_remove_all_tabs"

; android:onClick="onRemoveAllTabs" />

</LinearLayout>

</LinearLayout>

涉及布局文件action_bar_tab_content.xml的代码为

<?xml version="1.0" encoding="utf-8"?>

<TextView xmlns:android="http://schemas.android.com/apk/res/android"

android:id="@+id/text"

;android:layout_width="wrap_content"

android:layout_height="wrap_content" />

赞助本站

人工智能实验室

相关热词: Action Bar

AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港