国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Android應用開發中Action bar編寫的入門教程

2019-11-25 16:55:15
字體:
來源:轉載
供稿:網友

從Android 3.0開始除了我們重點講解的Fragment外,Action Bar也是一個重要的內容,Action Bar主要是用于代替傳統的標題欄,對于Android平板設備來說屏幕更大它的標題使用Action Bar來設計可以展示更多豐富的內容,方便操控。

Action Bar主要功能包含:

1. 顯示選項菜單
2. 提供標簽頁的切換方式的導航功能,可以切換多個fragment.
3. 提供下拉的導航條目.
4. 提供交互式活動視圖代替選項條目
5. 使用程序的圖標作為返回Home主屏或向上的導航操作。

提示在你的程序中應用ActionBar需要注意幾點,SDK和最終運行的固件必須是Android 3.0即honeycomb,在androidmanifest.xml文件中的uses-sdk元素中加入android:minSdkVersion 或android:targetSdkVersion,類似

< manifest xmlns:android="http://schemas.android.com/apk/res/android" package="eoe.android.cwj" android:versionCode="1" android:versionName="1.0"> < uses-sdk android:minSdkVersion="honeycomb" /> < application ... >  < /application> < /manifest> 


  如果需要隱藏Action Bar可以在你的Activity的屬性中設置主題風格為NoTitleBar在你的manifest文件中,下面的代碼在3.0以前是隱藏標題,而在3.0以后就是隱藏ActionBar了,代碼為:

< activity android:theme="@android:style/Theme.NoTitleBar"> 

一、添加活動條目 Action Items

  對于活動條目大家可以在下圖看到Android 3.0的標題右部分可以變成工具欄,下面的Save和Delete就是兩個Action Items活動條目。

  下面是一個menu的layout布局文件代碼

< ?xml version="1.0" encoding="utf-8"?> < menu xmlns:android="http://schemas.android.com/apk/res/android"> < item android:id="@+id/menu_add" android:icon="@drawable/ic_menu_save" android:title="@string/menu_save" android:showAsAction="ifRoom|withText" /> < /menu> 

  而其他代碼類似Activity中的Menu,比如

@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: // 當Action Bar的圖標被單擊時執行下面的Intent Intent intent = new Intent(this, Android123.class); startActivity(intent); break; } return super.onOptionsItemSelected(item); } 

對于ActionBar的創建,可以在你的Activity中重寫onStart方法:

@Override protected void onStart() { super.onStart(); ActionBar actionBar = this.getActionBar(); actionBar.setDisplayOptions(ActionBar.DISPLAY_HOME_AS_UP, ActionBar.DISPLAY_HOME_AS_UP); } 

 調用getActionBar方式在你的Activity的onCreate中時需要注意必須在調用了setContentView之后。

二、添加活動視圖 Action View

對于ActionView,我們可以在menu的布局文件使用中來自定義searchview布局,如下:

< item android:id="@+id/menu_search" android:title="Search" android:icon="@drawable/ic_menu_search" android:showAsAction="ifRoom" android:actionLayout="@layout/searchview" /> 

 也可以直接指定Android系統中的SearchView控件,那么這時menu"_search的代碼要這樣寫:

< item android:id="@+id/menu_search" android:title="Search" android:icon="@drawable/ic_menu_search" android:showAsAction="ifRoom" android:actionViewClass="android.widget.SearchView" /> 

  大家注意上面的兩種方法中一個屬性是actionLayout制定一個layout xml布局文件,一個是actionViewClass指定一個類,最終調用可以在Activity中響應onCreateOptionsMenu方法映射這個menu布局即可.

@Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.options, menu); SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView(); return super.onCreateOptionsMenu(menu); } 

三、添加標簽 Tabs

  在ActionBar中實現標簽頁可以實現android.app.ActionBar.TabListener ,重寫onTabSelected、onTabUnselected和onTabReselected方法來關聯Fragment。代碼如下:

private class MyTabListener implements ActionBar.TabListener {  private TabContentFragment mFragment;  public TabListener(TabContentFragment fragment) {  mFragment = fragment;  } @Override  public void onTabSelected(Tab tab, FragmentTransaction ft) {  ft.add(R.id.fragment_content, mFragment, null);  }  @Override  public void onTabUnselected(Tab tab, FragmentTransaction ft) {  ft.remove(mFragment);  }  @Override  public void onTabReselected(Tab tab, FragmentTransaction ft) {  }  } 

接下來我們創建ActionBar在Activity中,代碼如下;

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); final ActionBar actionBar = getActionBar(); //提示getActionBar方法一定在setContentView后面 actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); actionBar.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_TITLE); Fragment artistsFragment = new ArtistsFragment(); actionBar.addTab(actionBar.newTab().setText(R.string.tab_artists).setTabListener(new TabListener(artistsFragment))); Fragment albumsFragment = new AlbumsFragment(); actionBar.addTab(actionBar.newTab().setText(R.string.tab_albums).setTabListener(new TabListener(albumsFragment))); }

四、添加下拉導航 Drop-down Navigation:

創建一個SpinnerAdapter提供下拉選項,和Tab方式不同的是Drop-down只需要修改下setNavigationMode的模式,將ActionBar.NAVIGATION_MODE_TABS改為ActionBar.NAVIGATION_MODE_LIST,最終改進后的代碼為

ActionBar actionBar = getActionBar(); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); actionBar.setListNavigationCallbacks(mSpinnerAdapter, mNavigationCallback); 

上面我們通過setListNavigationCallbacks方法綁定一個SpinnerAdapter控件,具體的OnNavigationListener代碼示例為;

mOnNavigationListener = new OnNavigationListener() {  String[] strings = getResources().getStringArray(R.array.action_list);  @Override  public boolean onNavigationItemSelected(int position, long itemId) {  ListContentFragment newFragment = new ListContentFragment();  FragmentTransaction ft = openFragmentTransaction();  ft.replace(R.id.fragment_container, newFragment, strings[position]);  ft.commit();  return true; }  }; 


而其中的ListContentFragment的代碼為:

public class ListContentFragment extends Fragment { private String mText;  @Override public void onAttach(Activity activity) { super.onAttach(activity); mText = getTag(); }  @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { TextView text = new TextView(getActivity()); text.setText(mText); return text; } } 

五、實現切換Tabs標簽;
  
Activity代碼:  

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 鹰潭市| 威宁| 合肥市| 克山县| 江津市| 沂水县| 绿春县| 蓝山县| 班玛县| 年辖:市辖区| 台安县| 岐山县| 石泉县| 措美县| 苍梧县| 密云县| 牙克石市| 唐海县| 璧山县| 汪清县| 门头沟区| 区。| 太康县| 应用必备| 陇川县| 汾阳市| 黄梅县| 托克逊县| 鹿邑县| 沙洋县| 太白县| 民乐县| 额敏县| 双城市| 南和县| 屏山县| 花莲市| 彭泽县| 余庆县| 瑞金市| 漯河市|