最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

在Android中動態(tài)添加Panel框架的實(shí)現(xiàn)代碼

 更新時(shí)間:2013年05月09日 10:12:32   作者:  
項(xiàng)目經(jīng)常會有這種需求,就是想動態(tài)的在某個界面上添加一個Panel。比如,有一個按鈕,點(diǎn)擊后會顯示下拉菜單式的界面。這種需求,就屬于動態(tài)添加一個Panel。需求多了,就要研究是否可以抽象出通用的框架代碼,以方便開發(fā),所以就有了以下內(nèi)容
這里說是框架,說的大了點(diǎn),其實(shí)沒有那么復(fù)雜,只是一個容易擴(kuò)展的基類而已。不過至少算是框架類的代碼。
復(fù)制代碼 代碼如下:

package arui; 

import android.app.Activity; 
import android.os.Handler; 
import android.os.Looper; 
import android.os.Message; 
import android.view.Gravity; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup.LayoutParams; 
import android.view.ViewManager; 
import android.widget.FrameLayout; 

/**
 * Base class for panel.
 * 
 */ 
public abstract class BasePanel { 

    /**
     * left up position
     */ 
    public static final int LEFT_UP = 1; 

    /**
     * right up position
     */ 
    public static final int RIGHT_UP = 2; 

    /**
     * left bottom position
     */ 
    public static final int LEFT_BOTTOM = 3; 

    /**
     * right bottom position
     */ 
    public static final int RIGHT_BOTTOM = 4; 

    private static final int DEFAULT_MARGIN = 10; 

    private static final int SHOW_PANEL = 0; 

    private Activity activity; 

    private LayoutParams parameters; 

    private View view = null; 

    private int layoutId; 

    /**
     * constructor.
     * 
     * @param activity
     *            this panel will be attached to the activity
     * @param layoutId
     *            the panel's layout id
     */ 
    public BasePanel(Activity activity, int layoutId) { 
        this.activity = activity; 
        this.layoutId = layoutId; 
    } 

    /**
     * The developer can use this method to add the panel to the Activity.
     * 
     * @param act
     *            Activity
     * @param params
     *            LayoutParams
     */ 
    public void attach(LayoutParams params) { 
        parameters = params; 
        mHandler.sendMessage(mHandler.obtainMessage(SHOW_PANEL)); 

    } 

    /**
     * The developer can use this method to add the panel to the Activity.
     * 
     * @param act
     *            Activity
     * @param position
     *            int. You can use BasePanel.LEFT_UP,BasePanel.RIGHT_UP,
     *            BasePanel.RIGHT_BOTTOM or BasePanel.LEFT_BOTTOM.
     */ 
    public void attach(int position) { 
        attach(position, DEFAULT_MARGIN, DEFAULT_MARGIN, DEFAULT_MARGIN, 
                DEFAULT_MARGIN); 
    } 

    /**
     * The developer can use this method to add the panel to the Activity.
     * 
     * @param act
     *            Activity
     * @param position
     *            int. You can use BasePanel.LEFT_UP,BasePanel.RIGHT_UP,
     *            BasePanel.RIGHT_BOTTOM or BasePanel.LEFT_BOTTOM.
     * @param leftMargin
     *            int, left margin.
     * @param topMargin
     *            int, top margin.
     * @param rightMargin
     *            int, right margin.
     * @param bottomMargin
     *            int, bottom margin.
     * 
     */ 
    public void attach(int position, int leftMargin, int topMargin, 
            int rightMargin, int bottomMargin) { 
        FrameLayout.LayoutParams params = null; 
        params = new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT, 
                LayoutParams.WRAP_CONTENT); 
        params.setMargins(leftMargin, topMargin, rightMargin, bottomMargin); 
        switch (position) { 
        case LEFT_UP: 
            params.gravity = Gravity.LEFT; 
            break; 
        case RIGHT_UP: 
            params.gravity = Gravity.RIGHT; 
            break; 
        case LEFT_BOTTOM: 
            params.gravity = Gravity.LEFT | Gravity.BOTTOM; 
            break; 
        case RIGHT_BOTTOM: 
            params.gravity = Gravity.RIGHT | Gravity.BOTTOM; 
            break; 
        default: 
            break; 
        } 
        attach(params); 
    } 

    /**
     * The developer can use this method to remove the panel from the Activity.
     * 
     */ 
    public void remove() { 
        if (view != null) { 
            ViewManager mViewManager = (ViewManager) view.getParent(); 
            if (mViewManager != null) { 
                mViewManager.removeView(view); 
            } 
        } 
    } 

    private Handler mHandler = new Handler(Looper.getMainLooper()) { 

        @Override 
        public void handleMessage(Message msg) { 
            switch (msg.what) { 
            case SHOW_PANEL: 
                if (view == null) { 
                    LayoutInflater factory = LayoutInflater.from(activity); 
                    view = factory.inflate(layoutId, null); 
                } 
                dealwithPanel(view); 
                remove(); 
                activity.addContentView(view, parameters); 
                break; 
            } 
        } 

    }; 

    /**
     * do something with this panel.
     * 
     * @param view
     *            View of the panel
     */ 
    public abstract void dealwithPanel(View view); 

相關(guān)文章

  • android讀取Assets圖片資源保存到SD卡實(shí)例

    android讀取Assets圖片資源保存到SD卡實(shí)例

    本文為大家詳細(xì)介紹下android讀取Assets圖片資源保存到SD卡的具體實(shí)現(xiàn),感興趣的各位可以參考下哈,希望對大家有所幫助
    2013-07-07
  • Android學(xué)習(xí)筆記-保存數(shù)據(jù)到SQL數(shù)據(jù)庫中(Saving Data in SQL Databases)

    Android學(xué)習(xí)筆記-保存數(shù)據(jù)到SQL數(shù)據(jù)庫中(Saving Data in SQL Databases)

    這篇文章主要介紹了Android學(xué)習(xí)筆記-保存數(shù)據(jù)到SQL數(shù)據(jù)庫中的(Saving Data in SQL Databases)
    2014-10-10
  • Retrofit + OkHttp緩存處理的示例代碼

    Retrofit + OkHttp緩存處理的示例代碼

    本篇文章主要介紹了Retrofit + OkHttp緩存處理的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • Android TextSwitcher文本切換器和ViewFlipper使用詳解

    Android TextSwitcher文本切換器和ViewFlipper使用詳解

    這篇文章主要為大家詳細(xì)介紹了Android TextSwitcher文本切換器和ViewFlipper的使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • 基于Google ML模型開發(fā)Android物體檢測應(yīng)用

    基于Google ML模型開發(fā)Android物體檢測應(yīng)用

    ML Kit是Google提供的機(jī)器學(xué)習(xí)SDK,包含了一系列預(yù)訓(xùn)練模型,可以在Android和iOS應(yīng)用中快速添加機(jī)器學(xué)習(xí)功能,本項(xiàng)目基于Google ML模型開發(fā)Android物體檢測應(yīng)用,首先對圖像中的物體進(jìn)行分類檢測,獲取分類物體的位置區(qū)域,然后結(jié)合圖像標(biāo)記,逐個獲取單個物體的標(biāo)簽
    2024-07-07
  • Android開發(fā)之ViewFlipper自動播放圖片功能實(shí)現(xiàn)方法示例

    Android開發(fā)之ViewFlipper自動播放圖片功能實(shí)現(xiàn)方法示例

    這篇文章主要介紹了Android開發(fā)之ViewFlipper自動播放圖片功能實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了Android使用ViewFlipper實(shí)現(xiàn)圖片播放的相關(guān)界面布局及功能實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2019-03-03
  • Android onClick方法與setOnClickListener方法對比

    Android onClick方法與setOnClickListener方法對比

    這篇文章主要介紹了Android onClick方法與setOnClickListener方法對比的相關(guān)資料,這兩個方法都是點(diǎn)擊事件處理函數(shù)的方法,它們之間到底有什么區(qū)別呢,下面就給大家說下,需要的朋友可以參考下
    2016-12-12
  • Android布局技巧之使用ViewStub

    Android布局技巧之使用ViewStub

    這篇文章主要為大家詳細(xì)介紹了Android布局技巧之使用ViewStub,具有一定的實(shí)用性,感興趣的小伙伴們可以參考一下
    2016-06-06
  • Android SRT字幕文件基礎(chǔ)操作講解

    Android SRT字幕文件基礎(chǔ)操作講解

    這篇文章主要介紹了Android SRT字幕文件基礎(chǔ)操作,SRT的數(shù)據(jù)格式是通過以上單個數(shù)據(jù)節(jié)點(diǎn)可以提供一個大致的思路是:先定位一個數(shù)據(jù)節(jié)點(diǎn)的固定格式,然后將一行一行的讀取到數(shù)據(jù)
    2023-01-01
  • Android仿qq消息拖拽效果

    Android仿qq消息拖拽效果

    這篇文章主要為大家詳細(xì)介紹了Android仿qq消息拖拽效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01

最新評論

沅陵县| 兴义市| 腾冲县| 旌德县| 肥乡县| 青神县| 五台县| 枣庄市| 扎鲁特旗| 子长县| 中方县| 江孜县| 进贤县| 廉江市| 穆棱市| 德州市| 仁怀市| 陇川县| 封开县| 德阳市| 长顺县| 舞钢市| 即墨市| 锡林浩特市| 玉树县| 迁西县| 黄平县| 上犹县| 弋阳县| 盐津县| 东方市| 奈曼旗| 文山县| 军事| 肥东县| 米脂县| 稷山县| 万年县| 万全县| 江阴市| 石城县|