欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

android 自定義菜單

系統(tǒng) 1905 0

?

在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)的效果如下:

image image


作者: 藍(lán)之風(fēng) ?
出處: http://www.cnblogs.com/vaiyanzi/ ?
本文版權(quán)歸作者和博客園共有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責(zé)任的權(quán)利。

?

android 自定義菜單


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 九九综合 | 日本免费高清一区 | 一级片在线免费 | 色婷婷综合缴情综六月 | 久久久久久久免费看 | 精品欧美视频 | 九九99久久 | 欧美特黄a级高清免费看片 欧美精品一二区 | 国产精品久久久久久久久久久久 | 91在线一区二区三区 | wwwxx免费| 欧美一区二区三区四区五区 | 国产亚洲精品影视在线 | 国产精品第1页在线播放 | 杏美月av| 亚洲一区二区福利视频 | 老色鬼久久AV综合亚洲健身 | 久久精品一区 | 国产毛片久久久久久国产毛片 | 99热免费精品 | 免费观看国产大片资源视频 | 电家庭影院午夜 | 国产午夜精品一区二区三区嫩草 | 日本一区二区三区视频在线观看 | 国产伦理久久精品久久久久 | 国产中文字幕在线 | 激情丁香婷婷 | 色综合99| 免费啪视频在线观看免费的 | av一级久久 | 自拍偷拍亚洲视频 | 久久毛片网站 | 天天爱夜夜爽 | 亚洲国产成人精品女人久久久 | 国产精品久久久精品 | 久久精品美女 | 成年网站在线观看 | 九色九色久综色鬼在线 | 91短视频版官网 | 九一传媒在线观看 | 久久久www成人免费精品 |