在自定义View类中填充xml布局

我有一个类View1扩展View 。 我想在这个类View1膨胀R.layout.test2.xml 。 我已经在这个类中join了一个如下的代码

 public class View1 extends View { View view; String[] countries = new String[] {"India", "USA", "Canada"}; public View1( Context context) { super(context); LayoutInflater mInflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); view=mInflater.inflate(R.layout.test2, null, false); } } 

从另一个类Home我想这个充气的视图在那里的某些情况下,在Home课我写了下面的代码:

 public class Home extends Activity{ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.home); CreateView(); } public void CreateView() { LinearLayout lv=(LinearLayout)findViewById(R.id.linearlayout); View1 view = new View1(Home.this); lv.addView(view); } } 

但是当我运行我的项目时,这个活动并没有给我任何东西。

Solutions Collecting From Web of "在自定义View类中填充xml布局"

您不能将视图添加到View类,而应该使用ViewGroup或其一个子类(如LinearlayoutRelativeLayout等)。 那么你的代码将是这样的:

 public class View1 extends LinearLayout { View view; String[] countries = new String[] {"India", "USA", "Canada"}; public View1( Context context) { super(context); LayoutInflater mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); mInflater.inflate(R.layout.test2, this, true);}} 

另外该行:

 mInflater.inflate(R.layout.test2, null, false) 

不会向当前视图添加任何内容(由于false参数),它只是从xml布局扩展视图。

用这个

  LayoutInflater li = (LayoutInflater)getContext().getSystemService(infService); li.inflate(R.layout.test2, **this**, true); 

你必须使用this ,而不是null,并将false参数(boolean AttachToRoot)更改为true

使用下面的代码来扩大你的布局,那么你可以使用该视图用于任何目的。 这将给你的XML文件最父母的布局。 types转换并相应地使用它。

 View headerView = View.inflate(this, R.layout.layout_name, null); 

您正在添加家庭活动空白视图。 因为在View1类中,只能膨胀视图,而不能添加任何地方。

你必须使用像FrameLayout ViewGroup并做:

 public class View1 extends FrameLayout { public View1(Context context) { super(context); inflate(context, R.layout.view1, this); } } 

在布局XML中,使用<merge标签不只是将view1布局添加到根布局,这意味着我们有一个空的FrameLayout和您定义的视图彼此相邻。

 <?xml version="1.0" encoding="utf-8"?> <merge xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:text="content" /> </merge> 

请参阅http://trickyandroid.com/protip-inflating-layout-for-your-custom-view/