2011.06.03(2)——— android 1.6 launcher研究之自定义ViewGroup


1、用xml来作为ViewGroup里面的View
参考:http://www.eoeandroid.com/thread-30888-1-1.html

MyViewGroup.java


package com.lp;import android.content.Context;import android.util.AttributeSet;import android.util.Log;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;public class MyViewGroup extends ViewGroup {       public MyViewGroup(Context context, AttributeSet attrs, int defStyle) {        super(context, attrs, defStyle);    }    public MyViewGroup(Context context, AttributeSet attrs) {        super(context, attrs);    }    public MyViewGroup(Context context) {        super(context);        initializeView(context);    }    @Override    protected void onLayout(boolean changed, int l, int t, int r, int b) {        System.out.println(getChildCount());        for(int i=0;i<getChildCount();i++){            View view = getChildAt(i);            view.setVisibility(View.VISIBLE);                        view.measure(r - l, b - t);            view.layout(l, t, r, b);        }    }    private void initializeView(Context context) {        //LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);        LayoutInflater inflater = LayoutInflater.from(context);        View mycontrol = inflater.inflate(R.layout.myview, null);        addView(mycontrol);    }}


myviewgroup.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="800px"android:layout_height="600px" android:background="#F33603" android:orientation="vertical"><Button android:text="my button1" android:layout_width="wrap_content" android:layout_height="wrap_content" /><Button android:text="my button2" android:layout_width="wrap_content" android:layout_height="wrap_content" /><Button android:text="my button3" android:layout_width="wrap_content" android:layout_height="wrap_content" /></LinearLayout>


MainActivity.java
package com.lp;import android.app.Activity;import android.os.Bundle;public class MainActivity extends Activity {    /** Called when the activity is first created. */    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(new MyViewGroup(this));    }}


针对那个网址里面的错误 只要加上view.measure(r - l, b - t);就可以里了


2、自己些子view
参考:http://soft-app.iteye.com/blog/924757


MyViewGroup2.java

package com.lp;import android.content.Context;import android.util.AttributeSet;import android.view.View;import android.view.ViewGroup;import android.widget.Button;public class MyViewGroup2 extends ViewGroup {        public MyViewGroup2(Context context, AttributeSet attrs, int defStyle) {        super(context, attrs, defStyle);    }    public MyViewGroup2(Context context, AttributeSet attrs) {        super(context, attrs);    }    public MyViewGroup2(Context context) {        super(context);        initializeView(context);    }    @Override    protected void onLayout(boolean changed, int l, int t, int r, int b) {        System.out.println(getChildCount());        for(int i=0;i<getChildCount();i++){            View view = getChildAt(i);            view.setVisibility(View.VISIBLE);                        view.measure(r - l, b - t);            view.layout(10+i*5, 20+i*10, view.getMeasuredWidth(), view                      .getMeasuredHeight());        }    }    private void initializeView(Context context) {        Button btn1 = new Button(context);        btn1.setText("按钮1");        addView(btn1);        Button btn2 = new Button(context);        btn2.setText("按钮2");        addView(btn2);    }}


MainActivity.java

package com.lp;import android.app.Activity;import android.os.Bundle;public class MainActivity extends Activity {    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(new MyViewGroup2(this));    }}



注意:
1、两者的initializeView()方法不同 前者是从xml中获取view;后者是自己编写view
2、注意onLayout()方法
xml时
view.layout(l, t, r, b);
自己写时:
view.layout(10+i*50, 20+i*50, view.getMeasuredWidth(), view
.getMeasuredHeight());
也就是说 xml时 布局已经在xml里面说明了



另: 自定义ViewGroup的使用

1、如上面的
MainActivity.java
package com.lp;import android.app.Activity;import android.os.Bundle;public class MainActivity extends Activity {    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(new MyViewGroup2(this));    }}


2、layout的方式

<?xml version="1.0" encoding="utf-8"?><com.lp.MyViewGroup2 xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"    android:layout_height="fill_parent">  <Button  android:text="aaa"  android:layout_width="wrap_content"    android:layout_height="wrap_content"  />  <Button  android:text="bbb"  android:layout_width="wrap_content"    android:layout_height="60dip"  /></com.lp.MyViewGroup2>


然后 MainActivity.java

package com.lp;import android.app.Activity;import android.os.Bundle;public class MainActivity extends Activity {    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);    }}

更多相关文章

  1. Android(安卓)Studio 新建编辑条 点击按钮显示控件中的内容
  2. 2011.06.03(2)——— android 1.6 launcher研究之自定义ViewGroup
  3. Android(安卓)- 按钮组件详解
  4. Android简易实战教程--第十七话《自定义彩色环形进度条》
  5. android 常用控件一览(从底层分析,为自定义控件做下小铺垫)
  6. Android客户端接收来自Faye的消息推送
  7. Android(安卓)8.1.0 AOSP源码下载及编译
  8. 在android studio 中修改versioncode 和versionname
  9. 我的android 第4天 - Dialog

随机推荐

  1. Android(安卓)的核心服务
  2. 工作总结|Android(安卓)自定义列表刷新控
  3. android 网络访问-图片处理优秀开源项目
  4. android九宫格实现
  5. Android横屏竖屏切换的问题
  6. Android学习入门
  7. 淘宝Android客户端技术分析
  8. android中Intent简介
  9. 程序设置横屏后,锁屏时会被销毁一遍,解锁时
  10. 自定义tabhost实现