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

这里说是框架,说的大了点,其实没有那么复杂,只是一个容易扩展的基类而已。不过至少算是框架类的代码。

复制代码 代码如下:

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

}

时间: 2024-09-22 04:09:02

在Android中动态添加Panel框架的实现代码的相关文章

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

这里说是框架,说的大了点,其实没有那么复杂,只是一个容易扩展的基类而已.不过至少算是框架类的代码. 复制代码 代码如下: 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.LayoutInfla

radio button-Android中动态添加RadioButton,设置监听获取的id不对啊!

问题描述 Android中动态添加RadioButton,设置监听获取的id不对啊! 这样获取的checkId不对啊! radioGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group int checkedId) { int id = (int) group.getChildAt(checkedId).getT

如何在 android 中动态的添加 checkboxs?

问题描述 如何在 android 中动态的添加 checkboxs? 我想在android中动态的创建edittext 字段,也创建了按钮点击事件.当我点击按钮,check boxes就会显示.但是当我在onclick动作上创建checkbox对象,就显示错误.使用的代码如下,为什么会显示错误呢? public class InflationActivity extends Activity {@Overridepublic void onCreate(Bundle savedInstanceS

dit ext控件-android开发中EditText中动态添加别的控件(图片,按钮,视频)

问题描述 android开发中EditText中动态添加别的控件(图片,按钮,视频) 我想在EditText输入框中不仅仅输入文字,还想输入图片,图片的功能我已经实现了,怎么往里面加入一个按钮,或者加入一个VideoView控件用来播放视频?哪位大牛会啊,给个思路也行啊 解决方案 Android Edittext 添加按钮android开发EditText中添加图片 解决方案二: 组织成html字符串,textview可以解析 解决方案三: 用ImageSpan和SpannableString

Android viewpager中动态添加view并实现伪无限循环的方法_Android

本文实例讲述了Android viewpager中动态添加view并实现伪无限循环的方法.分享给大家供大家参考,具体如下: viewpager的使用,大家都熟悉,它可以实现页面之间左右滑动的切换,这里有一个需求,就是viewpager里面加载的页数不是确定的,而是根据数据的多少来确定的.常见的应用就是在一个新闻的详细页面中,显示与此新闻有关的图片. 下面我们来看一下代码: activity_main.xml <RelativeLayout xmlns:android="http://sch

Android viewpager中动态添加view并实现伪无限循环的方法

本文实例讲述了Android viewpager中动态添加view并实现伪无限循环的方法.分享给大家供大家参考,具体如下: viewpager的使用,大家都熟悉,它可以实现页面之间左右滑动的切换,这里有一个需求,就是viewpager里面加载的页数不是确定的,而是根据数据的多少来确定的.常见的应用就是在一个新闻的详细页面中,显示与此新闻有关的图片. 下面我们来看一下代码: activity_main.xml <RelativeLayout xmlns:android="http://sch

Android中动态更新ListView(转)

在使用ListView时,会遇到当ListView列表滑动到最底端时,添加新的列表项的问题,本文通过代码演示如何动态的添加新的列表项到ListView中.实现步骤:调用ListView的setOnScrollListener()方法设置滑动监听器,实现OnScrollListener接口的方法,判断当列表滑动到最低端时,加载新的列表项.其中OnScrollListener接口需要实现如下两个方法:onScroll(AbsListView view, int firstVisibleItem, i

Android中动态修改应用程序图标

问题描述 Android中动态修改应用程序图标 求大神告知,如何动态修改一个Android程序的图标呢?现在要求是后台有推送消息,现在需要把接收到的推送消息用一个红色数字显示到应用程序图标的右上角,IOS的APP基本都有这个效果,可是安卓怎么去实现呢?我现在目前已经实现了在手机桌面上创建和修改了图标了,但是程序栏里面的图标还是没有变换啊! 解决方案 快捷方式可以动态,重新生成就可以了.但lancher中的修改不了.那得是lancher级的修改才能生效.

combox-C#或者DEV控件高手进,求助大神!呀,gridview中动态添加COMBOX后出现问题

问题描述 C#或者DEV控件高手进,求助大神!呀,gridview中动态添加COMBOX后出现问题 步骤1:我定义一个全局的COMBOX控件变量: 步骤1:我为GRIDVIEW动态添加了一列,将这一列设置我步骤1中的COMBOX: 步骤2:我为这个COMBOX添加click事件,在事件中我读取GRIDVIEW中的focusROW,读取某一列,判断该列的值来动态为COMBOX添加ITEM; 问题:在click事件中,每次都能正确的获取focusROW,也能为combox添加ITEM,但是就是COM