39

我有一个View1扩展类View。我想R.layout.test2.xml在这堂课上充气View1。我在这个类中添加了以下代码

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);
    }
}

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

4

6 回答 6

52

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

    public class View1 extends LinearLayout {

        View view;
        String[] countries = new String[] {"India", "USA", "Canada"};

        public View1( Context context) {
            super(context);
            inflate(context, R.layout.test2, this);
        }
    }
于 2012-06-14T08:22:45.623 回答
12

用这个

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

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

于 2012-06-14T08:25:56.170 回答
3

使用下面的代码来扩展您的布局,然后您可以将该视图用于任何目的。这将为您提供 XML 文件的最父布局。键入 cast 并相应地使用它。

View headerView = View.inflate(this, R.layout.layout_name, null);
于 2012-06-14T08:31:42.250 回答
2

您必须使用ViewGrouplikeFrameLayout并执行以下操作:

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/

于 2017-05-08T09:52:18.880 回答
1

You are adding in home activity blank view. Because in View1 class you have only inflate view but not add anywhere.

于 2015-10-27T06:06:48.277 回答
0

在科特林
LayoutInflater.from(this).inflate(R.layout.custom_toolbar, null, false)

于 2019-11-26T06:20:18.107 回答