我有一个扩展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);
}
}
答案 0 :(得分:17)
好的尝试了这一点,并意识到它不起作用。问题是,View类没有添加子视图的方法。子视图只应添加到ViewGroups
。布局(例如LinearLayout
)会扩展ViewGroup
。因此,您需要扩展示例LinearLayout
。
然后,在您的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!");
}
希望这有帮助!