在Android中动态添加Panel框架的实现代码

所属分类: 软件编程 / Android 阅读数: 1515
收藏 0 赞 0 分享
这里说是框架,说的大了点,其实没有那么复杂,只是一个容易扩展的基类而已。不过至少算是框架类的代码。
复制代码 代码如下:

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); 

更多精彩内容其他人还在看

Android框架学习之Volley和Glide详解

这篇文章主要给大家介绍了关于Android框架学习之Volley和Glide的相关资料,文中通过示例代码介绍的非常详细,对各位Android开发者们具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

Android中Fragment的基本用法示例总结

Fragment是activity的界面中的一部分或一种行为,下面这篇文章主要给大家介绍了关于Android中Fragment的基本用法的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
收藏 0 赞 0 分享

Android.mk引入第三方jar包和so库文件的方法

这篇文章主要介绍了Android.mk引入第三方jar包和so库文件的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

Android仿微信录制小视频

这篇文章主要为大家详细介绍了Android仿微信录制小视频,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

android实现一键锁屏和一键卸载的方法实例

这篇文章主要给大家介绍了关于android如何实现一键锁屏和一键卸载的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
收藏 0 赞 0 分享

Android手势密码--设置和校验功能的实现代码

这篇文章主要介绍了Android手势密码--设置和校验功能的实现代码,非常不错,具有一定的参考校验价值,需要的朋友可以参考下
收藏 0 赞 0 分享

Kotlin学习笔记之const val与val

这篇文章主要给大家介绍了关于Kotlin学习笔记之const val与val的相关资料,并给大家介绍了const val和val区别以及Kotlin中var和val的区别,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

Android实现调用系统分享功能示例的总结

这篇文章主要介绍了通过Android调用系统分享文本信息、单张图片、多个文件和指定分享到微信、QQ,同时分享图片和文字的功能示例,小编觉得挺不错,一起跟随小编过来看看吧
收藏 0 赞 0 分享

Android自定义view实现输入控件

这篇文章主要为大家详细介绍了Android自定义view实现输入控件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android使用Intent.ACTION_SEND分享图片和文字内容的示例代码

这篇文章主要介绍了Android使用Intent.ACTION_SEND分享图片和文字内容的示例代码的实例代码,具有很好的参考价值,希望对大家有所帮助,一起跟随小编过来看看吧
收藏 0 赞 0 分享
查看更多