android 1.6 launcher研究之自訂ViewGroup (轉 2011.06.03(二)——— android 1.6 launcher研究之自訂ViewGroup )

來源:互聯網
上載者:User

標籤:android   style   blog   http   color   io   os   使用   java   

2011.06.03(2)——— android 1.6 launcher研究之自訂ViewGroup
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);    }}

android 1.6 launcher研究之自訂ViewGroup (轉 2011.06.03(二)——— android 1.6 launcher研究之自訂ViewGroup )

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.