Xmlに空の線形レイアウトが1つあります。そして、動的にテキストビューを追加しています。
これらのテキストビューが5を超えると、その中にもう1つの線形レイアウトを作成し、新しく作成したレイアウトにテキストビューを追加します。そして最後に、この新しいレイアウトをメインレイアウトに追加します。
追加できます。つまり、エミュレーターではそのスペースを占有しますが、テキストビューに情報は表示されません。
私のxmlは次のとおりです。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="vertical" >
<ScrollView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content" >
<LinearLayout
Android:id="@+id/dyn_layout"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:orientation="horizontal"
Android:padding="10dip" >
</LinearLayout>
</ScrollView>
<Button
Android:id="@+id/dyn_button1"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="Add TextViews" />
</LinearLayout>
そして私のJavaファイルは次のとおりです:
import Android.app.Activity;
import Android.os.Bundle;
import Android.view.Gravity;
import Android.view.View;
import Android.view.View.OnClickListener;
import Android.view.ViewGroup.LayoutParams;
import Android.widget.Button;
import Android.widget.LinearLayout;
import Android.widget.TextView;
public class AddTextViewsDynamically extends Activity implements
OnClickListener {
Button button;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.add_textview_dynamically);
button = (Button) findViewById(R.id.dyn_button1);
button.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.dyn_button1:
LinearLayout layout = (LinearLayout) findViewById(R.id.dyn_layout);
LinearLayout layout2 = null;
LinearLayout layout3 = null;
for (int i = 0; i < 10; i++) {
if (i > 4) {
if (i == 5) {
layout2 = new LinearLayout(this);
layout2.setLayoutParams(new LayoutParams(
LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT));
layout2.setOrientation(LinearLayout.VERTICAL);
layout2.setPadding(10, 60, 10, 10);
layout3 = new LinearLayout(this);
layout3.setLayoutParams(new LayoutParams(
LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT));
layout3.setOrientation(LinearLayout.HORIZONTAL);
layout3.setPadding(10, 10, 10, 10);
}
System.out.println("**** Adding text view " + i);
TextView text = new TextView(this);
text.setText("The Value of i is :" + i);
text.setTextSize(12);
text.setGravity(Gravity.LEFT);
text.setLayoutParams(new LayoutParams(155,
LayoutParams.WRAP_CONTENT));
layout3.addView(text);
if (i == 9) {
System.out
.println("Added second linear layout to first");
layout2.setVisibility(View.VISIBLE);
layout2.addView(layout3);
layout.addView(layout2);
}
} else {
System.out.println("###### Adding text view " + i);
TextView text = new TextView(this);
text.setText("The Value of i is :" + i);
text.setTextSize(12);
text.setGravity(Gravity.LEFT);
text.setLayoutParams(new LayoutParams(155,
LayoutParams.WRAP_CONTENT));
layout.addView(text);
}
}
}
}
}
どこが間違っているのですか?
プライマリLinearLayoutはHorizontalに設定されているため、最初の5つのテキストビューとlayout2が同じ行に表示されます。 Layout3をLayout2に追加すると、Layout3がプライマリリニアレイアウトの最後のテキストビューの右側から表示されます。 10インチのタブレットでは、LinearLayoutの最初の2つの要素のみが表示されます。おそらく、小さな画面では表示されません。使ってみてください
text.setLayoutParams(new LayoutParams(50, LayoutParams.WRAP_CONTENT));
の代わりに
text.setLayoutParams(new LayoutParams(155, LaoutParams.WRAP_CONTENT));
すべてのテキストビューが表示されます。
編集:あなたの場合、これでうまくいくはずです。 xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="vertical" >
<ScrollView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content" >
<LinearLayout
Android:id="@+id/dyn_layout"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:orientation="horizontal"
Android:padding="10dip" >
</LinearLayout>
<LinearLayout
Android:id="@+id/dyn_layout2"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:orientation="horizontal"
Android:visibility="gone"
Android:padding="10dip" >
</LinearLayout>
</ScrollView>
<Button
Android:id="@+id/dyn_button1"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="Add TextViews" />
</LinearLayout>
およびコード:
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.dyn_button1:
LinearLayout layout = (LinearLayout) findViewById(R.id.dyn_layout);
LinearLayout layout2 = (LinearLayout) findViewById(R.id.dyn_layout2);
LinearLayout layout3 = null;
for (int i = 0; i < 10; i++) {
if (i > 4) {
if (i == 5) {
layout2.setPadding(10, 60, 10, 10);
layout3 = new LinearLayout(this);
layout3.setLayoutParams(new LayoutParams(
LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT));
layout3.setOrientation(LinearLayout.HORIZONTAL);
layout3.setPadding(10, 10, 10, 10);
}
System.out.println("**** Adding text view " + i);
TextView text = new TextView(this);
text.setText("The Value of i is :" + i);
text.setTextSize(12);
text.setGravity(Gravity.LEFT);
text.setLayoutParams(new LayoutParams(155,
LayoutParams.WRAP_CONTENT));
layout3.addView(text);
if (i == 9) {
System.out
.println("Added second linear layout to first");
layout2.setVisibility(View.VISIBLE);
layout2.addView(layout3);
}
} else {
System.out.println("###### Adding text view " + i);
TextView text = new TextView(this);
text.setText("The Value of i is :" + i);
text.setTextSize(12);
text.setGravity(Gravity.LEFT);
text.setLayoutParams(new LayoutParams(155,
LayoutParams.WRAP_CONTENT));
layout.addView(text);
}
}
}
}
実際、あなたは正しいことをしています。パディングを削除し、すべての線形レイアウトの向きを垂直にしました。これをxmlファイルでも変更すると、機能します:)))親が取得したビューのパディングを10または60に追加するだけです。
変更Javaコード:
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.dyn_button1:
LinearLayout layout = (LinearLayout) findViewById(R.id.dyn_layout);
LinearLayout layout2 = null;
LinearLayout layout3 = null;
for (int i = 0; i < 10; i++) {
if (i > 4) {
if (i == 5) {
layout2 = new LinearLayout(this);
layout2.setLayoutParams(new LayoutParams(
LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT));
layout2.setOrientation(LinearLayout.VERTICAL);
// layout2.setPadding(10, 10, 10, 10);
layout3 = new LinearLayout(this);
layout3.setLayoutParams(new LayoutParams(
LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT));
layout3.setOrientation(LinearLayout.VERTICAL);
// layout3.setPadding(10, 10, 10, 10);
}
System.out.println("**** Adding text view " + i);
TextView text = new TextView(this);
text.setText("The Value of i is :" + i);
text.setTextSize(12);
text.setGravity(Gravity.LEFT);
text.setLayoutParams(new LayoutParams(155,
LayoutParams.WRAP_CONTENT));
layout3.addView(text);
if (i == 9) {
System.out
.println("Added second linear layout to first");
layout2.setVisibility(View.VISIBLE);
layout2.addView(layout3);
layout.addView(layout2);
}
} else {
System.out.println("###### Adding text view " + i);
TextView text = new TextView(this);
text.setText("The Value of i is :" + i);
text.setTextSize(12);
text.setGravity(Gravity.LEFT);
text.setLayoutParams(new LayoutParams(155,
LayoutParams.WRAP_CONTENT));
layout.addView(text);
}
}
}
}
これを試してみると、コードに問題がないことがわかります。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="vertical"
Android:weightSum="100" >
<HorizontalScrollView
Android:layout_width="wrap_content"
Android:layout_height="0dp"
Android:layout_weight="80" >
<LinearLayout
Android:id="@+id/dyn_layout"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:orientation="vertical"
Android:padding="10dip" >
</LinearLayout>
</HorizontalScrollView>
<Button
Android:id="@+id/dyn_button1"
Android:layout_width="wrap_content"
Android:layout_height="0dp"
Android:layout_weight="20"
Android:text="Add TextViews" />
</LinearLayout>