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(安卓)- 按钮组件详解
  2. Android简易实战教程--第十七话《自定义彩色环形进度条》
  3. android 常用控件一览(从底层分析,为自定义控件做下小铺垫)
  4. Android客户端接收来自Faye的消息推送
  5. Android(安卓)8.1.0 AOSP源码下载及编译
  6. 在android studio 中修改versioncode 和versionname
  7. 我的android 第4天 - Dialog
  8. Android(安卓)Studio逆向分析APK(Analyse APK)
  9. QT for Android(安卓)HelloWorld实现

随机推荐

  1. Android(安卓)Studio 3.1 正式版发布
  2. android 在init。rc中配置socket及其使用
  3. WP7、Android、iOS技术层面大比拼
  4. Android推荐学习路线图
  5. phoneGap开发android,JS调用android方法/
  6. android中Intent传值与Bundle传值详解
  7. Android系统信息获取 之十四:获取WIFI热点
  8. 怎样用 C/C++ 开发一个原生程序运行在 An
  9. Android通过百度地图API用Service和Alarm
  10. Android input输入设备键值从底层到应用