如何在android中的View中加载XML?

时间:2010-09-29 09:42:26

标签: android

我有一个扩展View的类。我有另一个扩展活动的类,我想添加要在活动类中加载的第一个类。 我尝试了以下代码

package Test2.pack;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;

public class Test2 extends Activity {
    /** Called when the activity is first created. */

    static view v;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);        

        try{
            v = (view) View.inflate(Test2.this, R.layout.main2, null);
        }catch(Exception e){
            System.out.println(" ERR " + e.getMessage()+e.toString());
        }       
    }
}

class view extends View{
    public view(Context context) {
        super(context);     
    }   
}

2 个答案:

答案 0 :(得分:17)

好的尝试了这一点,并意识到它不起作用。问题是,View类没有添加子视图的方法。子视图只应添加到ViewGroups。布局(例如LinearLayout)会扩展ViewGroup。因此,您需要扩展示例LinearLayout

,而不是扩展View

然后,在您的XML中,引用布局:

<my.package.MyView android:id="@+id/CompId" android:layout_width="fill_parent" android:layout_height="fill_parent"/>

然后在您的自定义类中,膨胀并添加:

public class MyView extends LinearLayout {

    public MyView(Context context) {
        super(context);
        this.initComponent(context);
    }

    public MyView(Context context, AttributeSet attrs) {
        super(context, attrs);
        this.initComponent(context);
    }


    private void initComponent(Context context) {

         LayoutInflater inflater = LayoutInflater.from(context);
         View v = inflater.inflate(R.layout.foobar, null, false);
         this.addView(v);

    }

}

答案 1 :(得分:0)

建议:避免将类名称命名为非常接近现有类(例如View,Activity);

由于您正在扩展View(默认情况下不会绘制任何特定内容),因此您无法在活动中看到任何内容。

首先扩展TextView对象以获得感觉。

public class MyTextView extends TextView {
    public MyTextView(Context c){
    super(c);
}

// ----

public class MyActivity extends Activity {

    MyTextView myTextView;

     @Override 
     protected void onCreate(Bundle savedInstance){
     super.onCreate(savedInstance);
     setContentView(myTextView = new MyTextView(this);

     myTextView.setText("It works!");
}

希望这有帮助!