クラスがあります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);
}
}
しかし、プロジェクトを実行すると、アクティビティには何も表示されません。
代わりにView
クラスにビューを追加することはできません。代わりにViewGroup
またはそのサブクラスの1つ(Linearlayout
、RelativeLayout
など)を使用する必要があります。次に、コードは次のようになります。
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レイアウトからView
を膨らませます。
これを使って
LayoutInflater li = (LayoutInflater)getContext().getSystemService(infService);
li.inflate(R.layout.test2, **this**, true);
Nullではなくthis
を使用し、false
パラメーター(boolean AttachToRoot)をtrue
に変更する必要があります。
以下のコードを使用してレイアウトを膨らませると、そのビューをあらゆる目的に使用できます。これにより、XMLファイルの最も親のレイアウトが得られます。 castと入力し、それに応じて使用します。
View headerView = View.inflate(this, R.layout.layout_name, null);
ViewGroup
のようなFrameLayout
を使用する必要があります。
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/ を参照してください
ホームアクティビティの空白のビューに追加しています。 View1クラスではビューを膨張させるだけで、どこにも追加できないためです。