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

首頁 > 系統(tǒng) > Android > 正文

Android編程自定義菜單實(shí)現(xiàn)方法詳解

2019-10-23 19:45:54
字體:
供稿:網(wǎng)友

本文實(shí)例講述了Android編程自定義菜單實(shí)現(xiàn)方法。分享給大家供大家參考,具體如下:

在android開發(fā)的過程中系統(tǒng)自帶的菜單往往滿足不了開發(fā)中的一些需求,比如說一排最多只能放置三個(gè)菜單,坐多只能放置6個(gè),再多的話就會(huì)折疊起來,如果我們想再一排顯示4個(gè)或5個(gè)菜單那么就要自己想辦法處理。

這里我用布局的隱藏并加上動(dòng)畫來模擬菜單的效果。

要點(diǎn):

1、隱藏和顯示菜單,我使用了一個(gè)線性布局把菜單封裝起來。

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_alignParentBottom="true" android:background="@drawable/menubackground" android:layout_width="fill_parent" android:layout_height="144px" android:orientation="vertical" android:gravity="center" android:visibility="gone"   android:id="@+id/lines">   <LinearLayout android:orientation="horizontal"   android:gravity="center"   android:layout_width="fill_parent" android:layout_height="72px"   > <ImageButton   android:layout_marginLeft="8dip"   android:id="@+id/menu_btn_index"   android:layout_width="wrap_content"   android:layout_height="wrap_content"   android:background="@drawable/menu_index_selector"   />  <ImageButton   android:layout_width="wrap_content"   android:layout_height="wrap_content"   android:background="@drawable/menu_news_selector"   android:id="@+id/menu_btn_news"   />  <ImageButton   android:layout_width="wrap_content"   android:layout_height="wrap_content"   android:background="@drawable/menu_lib_selector"   android:id="@+id/menu_btn_lib"   />    <ImageButton   android:layout_width="wrap_content"   android:layout_height="wrap_content"   android:background="@drawable/menu_add_selector"   android:id="@+id/menu_btn_add"   /> <ImageButton   android:layout_width="wrap_content"   android:layout_height="wrap_content"   android:background="@drawable/menu_set_selector"   android:id="@+id/menu_btn_set"   /> </LinearLayout> <LinearLayout android:orientation="horizontal" android:gravity="center"   android:layout_width="fill_parent"   android:layout_height="72px"> <ImageButton   android:layout_marginLeft="8dip"   android:id="@+id/menu_btn_index"   android:layout_width="wrap_content"   android:layout_height="wrap_content"   android:background="@drawable/menu_index_selector"   />  <ImageButton   android:layout_width="wrap_content"   android:layout_height="wrap_content"   android:background="@drawable/menu_news_selector"   android:id="@+id/menu_btn_news"   />  <ImageButton   android:layout_width="wrap_content"   android:layout_height="wrap_content"   android:background="@drawable/menu_lib_selector"   android:id="@+id/menu_btn_lib"   />  <ImageButton   android:layout_width="wrap_content"   android:layout_height="wrap_content"   android:background="@drawable/menu_add_selector"   android:id="@+id/menu_btn_add"   /> <ImageButton   android:layout_width="wrap_content"   android:layout_height="wrap_content"   android:background="@drawable/menu_quit_selector"   android:id="@+id/menu_btn_quit"   /> </LinearLayout></LinearLayout>

2、模擬菜單的效果,增加動(dòng)畫,布局顯示的時(shí)候增加一個(gè)漸漸底部生氣的效果,隱藏的時(shí)候增加一個(gè)緩緩下落的效果,顯示菜單動(dòng)畫文件:

<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android">  <translate    android:fromXDelta="0"    android:toXDelta="0"    android:fromYDelta="00"    android:toYDelta="140"    android:duration="200" /></set>

隱藏菜單動(dòng)畫文件:

<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android">  <translate    android:fromXDelta="0"    android:toXDelta="0"    android:fromYDelta="140"    android:toYDelta="00"    android:duration="200" /></set>

動(dòng)畫調(diào)用:

 /**  * 顯示菜單欄, 重新實(shí)現(xiàn)的Option menu.  * */ private void showAppMenu() {   if (menuShowAnimation == null) {     menuShowAnimation = AnimationUtils         .loadAnimation(mContext, R.anim.menuhide);   }   myLayout.startAnimation(menuShowAnimation);   myLayout.setVisibility(View.VISIBLE); } /**  * 隱藏菜單欄, 重新實(shí)現(xiàn)的Option menu.  * */ private void hideAppMenu() {   myLayout.setVisibility(View.GONE);   if (menuHideAnimation == null)     menuHideAnimation =AnimationUtils         .loadAnimation(mContext, R.anim.menushow);   myLayout.startAnimation(menuHideAnimation); }

3、控制菜單的隱藏和顯示,需要重寫三個(gè)方法public boolean onCreateOptionsMenu(Menu menu),
public boolean dispatchKeyEvent(KeyEvent event) 和public boolean dispatchTouchEvent(MotionEvent event)

@Override  public boolean onCreateOptionsMenu(Menu menu) {    if(mCustomMenu==null)      mCustomMenu=new CustomMenu(CustomMenuActivity.this,CustomMenuActivity.this);    mCustomMenu.CreateMenu();    return false;  }  @Override  public boolean dispatchKeyEvent(KeyEvent event) {    if(mCustomMenu!=null)      return mCustomMenu.dispatchKeyEvent(event,super.dispatchKeyEvent(event));    return super.dispatchKeyEvent(event);  }  @Override  public boolean dispatchTouchEvent(MotionEvent event) {    if(mCustomMenu!=null)      return mCustomMenu.dispatchTouchEvent(event,super.dispatchTouchEvent(event));    return super.dispatchTouchEvent(event);  }

4、實(shí)現(xiàn)菜單點(diǎn)擊時(shí)候被點(diǎn)擊菜單狀態(tài)的般變化,這里我使用了selector來實(shí)現(xiàn),菜單我使用ImageButton將selector賦值給ImageButton 的background即可:

一個(gè)菜單項(xiàng)

<ImageButton   android:layout_marginLeft="8dip"   android:id="@+id/menu_btn_index"   android:layout_width="wrap_content"   android:layout_height="wrap_content"   android:background="@drawable/menu_index_selector"   />

menu_index_selector 文件內(nèi)容如下:

<?xml version="1.0" encoding="utf-8"?><!-- Copyright (C) 2009 The Android Open Source Project  Licensed under the Apache License, Version 2.0 (the "License");  you may not use this file except in compliance with the License.  You may obtain a copy of the License at   http://www.apache.org/licenses/LICENSE-2.0  Unless required by applicable law or agreed to in writing, software  distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the specific language governing permissions and  limitations under the License.--><selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_window_focused="false"  android:drawable="@drawable/menu_index" /> <item android:state_pressed="true"  android:drawable="@drawable/menu_index1" /> <item android:state_focused="true"  android:drawable="@drawable/menu_index1" /> <item   android:drawable="@drawable/menu_index" /></selector>

5、頁面的調(diào)用使用:<include>標(biāo)簽來進(jìn)行引用:

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <include layout="@layout/menu_layout"/> </RelativeLayout>

這樣的話一個(gè)模擬的自定義菜單就基本完成了,菜單控制完整代碼java類:

package com.demo.utils;import android.app.Activity;import android.content.Context;import android.content.res.Resources;import android.view.KeyEvent;import android.view.MotionEvent;import android.view.View;import android.view.View.OnClickListener;import android.view.animation.Animation;import android.view.animation.AnimationUtils;import android.widget.ImageButton;import android.widget.LinearLayout;import com.demo.HelloWorld.R;/** * @author Administrator *   xsl xushilin@kingtoneinfo.com * @version: 創(chuàng)建時(shí)間:2011-8-30 上午11:16:19 * 說   明: * 修改歷史: */public class CustomMenu {  private LinearLayout myLayout;  private Context mContext;  private Activity mActivity;  private Animation menuShowAnimation = null;  private Animation menuHideAnimation = null;  private Resources res;  public int screen_height;  private ImageButton imgIndex,imgSet,imgNews,imgAdd,imgQuit,imgLib;  public CustomMenu(Context context,Activity activity){    mContext=context;    mActivity=activity;    res = mContext.getResources();    screen_height = res.getDisplayMetrics().heightPixels;    myLayout=(LinearLayout)activity.findViewById(R.id.lines);    imgIndex=(ImageButton)activity.findViewById(R.id.menu_btn_index);    imgSet=(ImageButton)activity.findViewById(R.id.menu_btn_set);    imgNews=(ImageButton)activity.findViewById(R.id.menu_btn_news);    imgAdd=(ImageButton)activity.findViewById(R.id.menu_btn_add);    imgQuit=(ImageButton)activity.findViewById(R.id.menu_btn_quit);    imgLib=(ImageButton)activity.findViewById(R.id.menu_btn_lib);    //返回首頁    imgIndex.setOnClickListener(new OnClickListener(){      public void onClick(View v) {        //TODO do somthing      }    });    //設(shè)置    imgSet.setOnClickListener(new OnClickListener(){      public void onClick(View v) {        //TODO do somthing      }    });    //查詢    imgNews.setOnClickListener(new OnClickListener(){      public void onClick(View v) {        //TODO do somthing      }    });    //編輯    imgAdd.setOnClickListener(new OnClickListener(){      public void onClick(View v) {        //TODO do somthing      }    });    //退出系統(tǒng)    imgQuit.setOnClickListener(new OnClickListener(){      public void onClick(View v) {        //TODO do somthing      }    });    //素材庫    imgLib.setOnClickListener(new OnClickListener(){      public void onClick(View v) {        //TODO do somthing      }    });  }  public void CreateMenu(){    if(myLayout.getVisibility()==View.GONE)      showAppMenu();      //myLayout.setVisibility(View.VISIBLE);    else      hideAppMenu();      //myLayout.setVisibility(View.GONE);  }   /**  * 顯示菜單欄, 重新實(shí)現(xiàn)的Option menu.  * */ private void showAppMenu() {   if (menuShowAnimation == null) {     menuShowAnimation = AnimationUtils         .loadAnimation(mContext, R.anim.menuhide);   }   myLayout.startAnimation(menuShowAnimation);   myLayout.setVisibility(View.VISIBLE); } /**  * 隱藏菜單欄, 重新實(shí)現(xiàn)的Option menu.  * */ private void hideAppMenu() {   myLayout.setVisibility(View.GONE);   if (menuHideAnimation == null)     menuHideAnimation =AnimationUtils         .loadAnimation(mContext, R.anim.menushow);   myLayout.startAnimation(menuHideAnimation); } public boolean dispatchTouchEvent(MotionEvent event,boolean b) {    if (myLayout.getVisibility() == View.VISIBLE) {      int y = (int) event.getRawY();      if (y < screen_height - myLayout.getHeight()) {        hideAppMenu();        return true;      }    }    return b; } public boolean dispatchKeyEvent(KeyEvent event,boolean b) {   int act = event.getAction();   int code = event.getKeyCode();   // app menu like option menu   if (code == KeyEvent.KEYCODE_MENU){     if (act == KeyEvent.ACTION_DOWN){       if (myLayout.getVisibility() == View.VISIBLE) {         hideAppMenu();       } else {         showAppMenu();       }       return true;     }   }else if (code == KeyEvent.KEYCODE_BACK){     if (myLayout.getVisibility() == View.VISIBLE) {       hideAppMenu();       return true;     }   }   return b; }}

activity調(diào)用菜單完整代碼:

package com.demo.ui;import com.demo.HelloWorld.R;import com.demo.utils.CustomMenu;import android.app.Activity;import android.os.Bundle;import android.view.KeyEvent;import android.view.Menu;import android.view.MotionEvent;/** * @author XSL *   xsl xushilin@kingtoneinfo.com * @version: 創(chuàng)建時(shí)間:2011-8-30 上午11:13:14 * 說   明: * 修改歷史: */public class CustomMenuActivity extends Activity {  private CustomMenu mCustomMenu=null;  @Override  public void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.custom_menu);  }  @Override  public boolean onCreateOptionsMenu(Menu menu) {    if(mCustomMenu==null)      mCustomMenu=new CustomMenu(CustomMenuActivity.this,CustomMenuActivity.this);    mCustomMenu.CreateMenu();    return false;  }  @Override  public boolean dispatchKeyEvent(KeyEvent event) {    if(mCustomMenu!=null)      return mCustomMenu.dispatchKeyEvent(event,super.dispatchKeyEvent(event));    return super.dispatchKeyEvent(event);  }  @Override  public boolean dispatchTouchEvent(MotionEvent event) {    if(mCustomMenu!=null)      return mCustomMenu.dispatchTouchEvent(event,super.dispatchTouchEvent(event));    return super.dispatchTouchEvent(event);  }}

實(shí)現(xiàn)的效果如下:

Android,自定義,菜單Android,自定義,菜單

 

希望本文所述對(duì)大家Android程序設(shè)計(jì)有所幫助。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到Android開發(fā)頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 华宁县| 潮州市| 德江县| 彰武县| 柳江县| 曲松县| 汉沽区| 佛山市| 宁安市| 原阳县| 淮北市| 通州区| 长寿区| 深圳市| 乐东| 东明县| 双鸭山市| 罗田县| 平南县| 贵港市| 隆回县| 镇雄县| 保亭| 鄂州市| 毕节市| 枣阳市| 鄂托克旗| 镇安县| 凤凰县| 温宿县| 高州市| 温宿县| 兴隆县| 原阳县| 澄城县| 凤山市| 大兴区| 基隆市| 永仁县| 姜堰市| 巴林左旗|