android(10) 左側功能表列

來源:互聯網
上載者:User

標籤:android

一.左側功能表列:

    下載了一份源碼,看見了這種效果,其實就是顯示隱藏,以後肯定能用的到,稍微改了一下,加了點注釋,所以記錄一下(要代碼的留下郵箱)。

 


主介面:

public class MainActivity extends Activity implementsMenuItemCallback {private MenuView rbmView;private Button button1;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);button1 = (Button)findViewById(R.id.button1);rbmView = (MenuView) findViewById(R.id.ribbonMenuView1);rbmView.setMenuClickCallback(this);rbmView.setMenuItems(R.menu.ribbon_menu);button1.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View arg0) { Toast.makeText(MainActivity.this,"我只是個沒有用的按鈕!", Toast.LENGTH_SHORT).show();}});        //表徵圖可以點擊getActionBar().setDisplayHomeAsUpEnabled(true);}    //點擊menu時調用@Overridepublic boolean onOptionsItemSelected(MenuItem item) {int id = item.getItemId();if (id == android.R.id.home) {rbmView.toggleMenu();return true;} else {return super.onOptionsItemSelected(item);}}    @Overridepublic void MenuItemClick(int itemId) {           Toast.makeText(this, "點擊",Toast.LENGTH_SHORT).show();}}
MenuView:

public class MenuView extends LinearLayout {private ListView rbmListView;private View rbmOutsideView;private MenuItemCallback callback;private static ArrayList<RibbonMenuItem> menuItems;public MenuView(Context context) {super(context);load();}public MenuView(Context context, AttributeSet attrs) {super(context, attrs);load();}    //加菜private void load() {if (isInEditMode())return;inflateLayout();initUi();}// 初始化布局private void inflateLayout() {try {LayoutInflater.from(getContext()).inflate(R.layout.activity_menu, this, true);} catch (Exception e) {}}    //初始化uiprivate void initUi() {rbmListView = (ListView) findViewById(R.id.rbm_listview);rbmOutsideView = (View) findViewById(R.id.rbm_outside_view);// 點擊陰影處隱藏rbmOutsideView.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {hideMenu();}});// item點擊隱藏rbmListView.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view,int position, long id) {//回調if (callback != null)callback.MenuItemClick(menuItems.get(position).id);hideMenu();}});}public void setMenuClickCallback(MenuItemCallback callback) {this.callback = callback;}public void setMenuItems(int menu) {parseXml(menu);if (menuItems != null && menuItems.size() > 0) {rbmListView.setAdapter(new Adapter());}}// 載入圖片資源public void setBackgroundResource(int resource) {rbmListView.setBackgroundResource(resource);}// 顯示菜單public void showMenu() {rbmOutsideView.setVisibility(View.VISIBLE);rbmOutsideView.startAnimation(AnimationUtils.loadAnimation(getContext(),R.anim.menu_in_from_left));rbmListView.setVisibility(View.VISIBLE);rbmListView.startAnimation(AnimationUtils.loadAnimation(getContext(),R.anim.menu_in_from_left));}// 隱藏菜單public void hideMenu() {rbmOutsideView.setVisibility(View.GONE);rbmOutsideView.startAnimation(AnimationUtils.loadAnimation(getContext(),R.anim.menu_out_to_left));rbmListView.setVisibility(View.GONE);rbmListView.startAnimation(AnimationUtils.loadAnimation(getContext(),R.anim.menu_out_to_left));}    //隱藏與顯示的交替public void toggleMenu() {if (rbmOutsideView.getVisibility() == View.GONE) {showMenu();} else {hideMenu();}}// 讀取xml檔案private void parseXml(int menu) {menuItems = new ArrayList<MenuView.RibbonMenuItem>();try {XmlResourceParser xpp = getResources().getXml(menu);xpp.next();int eventType = xpp.getEventType();while (eventType != XmlPullParser.END_DOCUMENT) {if (eventType == XmlPullParser.START_TAG) {String elemName = xpp.getName();if (elemName.equals("item")) {// 第一個參數是命名空間,第二個參數是屬性名稱String text = xpp.getAttributeValue("http://schemas.android.com/apk/res/android","title");String iconId = xpp.getAttributeValue("http://schemas.android.com/apk/res/android","icon");String resId = xpp.getAttributeValue("http://schemas.android.com/apk/res/android","id");System.out.println(text + " " + iconId + " " + resId);RibbonMenuItem item = new RibbonMenuItem();// id值都是@id所以要去掉@item.id = Integer.valueOf(resId.replace("@", ""));System.out.println(item.id);item.text = resourceIdToString(text);item.icon = Integer.valueOf(iconId.replace("@", ""));menuItems.add(item);}}eventType = xpp.next();}} catch (Exception e) {e.printStackTrace();}}// 判斷字串中是否含有@字元private String resourceIdToString(String text) {if (!text.contains("@")) {return text;} else {String id = text.replace("@", "");return getResources().getString(Integer.valueOf(id));}}    //判斷當前菜單是否隱藏public boolean isMenuVisible() {return rbmOutsideView.getVisibility() == View.VISIBLE;}@Overrideprotected void onRestoreInstanceState(Parcelable state) {SavedState ss = (SavedState) state;super.onRestoreInstanceState(ss.getSuperState());if (ss.bShowMenu)showMenu();elsehideMenu();}// 儲存UI狀態@Overrideprotected Parcelable onSaveInstanceState() {Parcelable superState = super.onSaveInstanceState();SavedState ss = new SavedState(superState);ss.bShowMenu = isMenuVisible();return ss;}// 儲存介面狀態static class SavedState extends BaseSavedState {boolean bShowMenu;SavedState(Parcelable superState) {super(superState);}private SavedState(Parcel in) {super(in);bShowMenu = (in.readInt() == 1);}@Overridepublic void writeToParcel(Parcel out, int flags) {super.writeToParcel(out, flags);out.writeInt(bShowMenu ? 1 : 0);}public static final Parcelable.Creator<SavedState> CREATOR = new Parcelable.Creator<SavedState>() {public SavedState createFromParcel(Parcel in) {return new SavedState(in);}public SavedState[] newArray(int size) {return new SavedState[size];}};}class RibbonMenuItem {int id;String text;int icon;}private class Adapter extends BaseAdapter {private LayoutInflater inflater;public Adapter() {inflater = LayoutInflater.from(getContext());}@Overridepublic int getCount() {return menuItems.size();}@Overridepublic Object getItem(int position) {return null;}@Overridepublic long getItemId(int position) {return 0;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {final ViewHolder holder;if (convertView == null || convertView instanceof TextView) {convertView = inflater.inflate(R.layout.activity_menu_item, null);holder = new ViewHolder();holder.image = (ImageView) convertView.findViewById(R.id.rbm_item_icon);holder.text = (TextView) convertView.findViewById(R.id.rbm_item_text);convertView.setTag(holder);} else {holder = (ViewHolder) convertView.getTag();}holder.image.setImageResource(menuItems.get(position).icon);holder.text.setText(menuItems.get(position).text);return convertView;}class ViewHolder {TextView text;ImageView image;}}}
回調方法:
public interface MenuItemCallback {//點擊item時調用public void MenuItemClick(int itemId);}

主布局:

<?xml version="1.0" encoding="utf-8"?><FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent" >    <Button        android:id="@+id/button1"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:text="點擊左上方表徵圖左邊的箭頭,就能看到效果了!"        />        <com.example.testtexiao7.MenuView        android:id="@+id/ribbonMenuView1"        android:layout_width="match_parent"        android:layout_height="match_parent" /></FrameLayout>

menu布局:

<?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="horizontal" >    <ListView         android:id="@+id/rbm_listview"        android:layout_width="@dimen/menu_width"        android:layout_height="match_parent"         android:background="@color/menu_background"           android:visibility="gone"        android:cacheColorHint="#00000000">    </ListView>        <!-- 陰影 -->    <View         android:id="@+id/rbm_outside_view"        android:layout_width="0dp"        android:layout_height="match_parent"           android:background="#e0000000"             android:layout_weight="1"        android:clickable="true"        android:visibility="gone"        /></LinearLayout>

item:

<?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="horizontal" >    <ListView         android:id="@+id/rbm_listview"        android:layout_width="@dimen/menu_width"        android:layout_height="match_parent"         android:background="@color/menu_background"           android:visibility="gone"        android:cacheColorHint="#00000000">    </ListView>        <!-- 陰影 -->    <View         android:id="@+id/rbm_outside_view"        android:layout_width="0dp"        android:layout_height="match_parent"           android:background="#e0000000"             android:layout_weight="1"        android:clickable="true"        android:visibility="gone"        /></LinearLayout>

這是主要的部分代碼,其他的檔案就先不貼了。

android(10) 左側功能表列

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.