質問のタイトルが問題の良い説明になることを願っています。
このXMLを作成したいのですが、プログラムで作成します(プログラムで作成しないことを提案しないでください^ _ ^)
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:orientation="vertical"
Android:padding="10dip"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent">
<TextView Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:layout_marginBottom="10dip"
Android:text="Messages:"/>
<EditText Android:id="@+id/messageHistory"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:clickable="false"
Android:layout_weight="1"
Android:editable="false"
Android:gravity="top"
Android:scrollbars="vertical"
Android:scrollbarSize="10px"
/>
<LinearLayout Android:orientation="horizontal"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:layout_weight="4">
<EditText Android:id="@+id/message"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:gravity="top"
Android:layout_weight="1"
/>
<Button Android:id="@+id/sendMessageButton"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:layout_weight="4"
Android:text="Send"/>
</LinearLayout>
ご覧のとおり、2つのLinearLayoutがあり、一方が他方に埋め込まれています。これを再現してから、ViewFlipperに追加する必要があります。
これは私がこれまでに持っているものです:
LinearLayout l1 = new LinearLayout(this);
LinearLayout l2 = new LinearLayout(this);
Button btn=new Button(this);
EditText messageHistory = new EditText(this);
EditText newMessage = new EditText(this);
TextView windowTitle = new TextView(this);
btn.setText("Send");
btn.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT, 4f));
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getApplicationContext(), "Clicked send in child index: "+ flipper.getDisplayedChild(), Toast.LENGTH_SHORT).show();
}
});
windowTitle.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
windowTitle.setPadding(0, 5, 0, 10);
windowTitle.setText("Chat with: ");
messageHistory.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
messageHistory.setGravity(Gravity.TOP);
messageHistory.setMovementMethod(new ScrollingMovementMethod());
messageHistory.setClickable(false);
messageHistory.setFocusable(false);
messageHistory.setPadding(0, 0, 0, 5);
newMessage.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT, 1f));
newMessage.setGravity(Gravity.TOP);
newMessage.setMovementMethod(new ScrollingMovementMethod());
newMessage.requestFocus();
l1.setOrientation(LinearLayout.VERTICAL);
l1.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
l2.setOrientation(LinearLayout.HORIZONTAL);
l2.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
l1.addView(windowTitle);
l1.addView(messageHistory);
l2.addView(newMessage);
l2.addView(btn);
l1.addView(l2);
flipper.addView(l1);
フリッパーは次のように定義されます。
ViewFlipper flipper = (ViewFlipper) findViewById(R.id.viewflip);
問題なく、ロード時にウィンドウに「l1」が表示されますが、l2はどこにも見つかりません。 LayoutParamsを台無しにしましたか? addViewを使用してLinearLayoutを追加できますか?
レイアウトの重みを設定するのを忘れたと思います(私の意見だけですが、間違っている可能性があります)。 layout-heightをFILL_PARENTに設定してビューを追加しているため