我的Android应用程序出了问题。我想在TableLayout中动态创建4个TableRows。每行中的每一行都包含1个TextView。我希望TextView像这样:
textview1
textview2
textview3
textview4
分为4个不同的行。
我可以动态创建Tewtview,但尺寸不匹配。例如,如果我的第一个textview包含一个大文本,它似乎是单个文本而不继续到下一行
我读了很多类似的问题,但找不到解决方案。这是我的布局文件:
<Relativelayout>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_marginTop="10dip" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_below="@+id/didyoudo"
android:layout_above="@+id/bardown" android:scrollbarFadeDuration="1000"
android:scrollbarSize="12dip">
<TableLayout android:id="@+id/answertable"
android:layout_width="fill_parent" android:layout_height="wrap_content"
android:stretchColumns="0,1" android:collapseColumns="2">
</TableLayout>
</ScrollView>
<Relativelayout/>
这就是我动态生成行和textview的方式
for (k =0; k< questionCount;k++ ) {
//tmpDict = trivialist.get(k);
Trivia trivia = trivialist.get(k);
TableRow row = new TableRow(getApplicationContext());
TableRow row1 = new TableRow(getApplicationContext());
TableRow row2 = new TableRow(getApplicationContext());
TableRow row3 = new TableRow(getApplicationContext());
TextView tv1 = new TextView(getApplicationContext());
TextView tv2 = new TextView(getApplicationContext());
TextView tv3 = new TextView(getApplicationContext());
TextView tv4 = new TextView(getApplicationContext());
desc = trivia.getAnswerDesc();
quizquestion = trivia.getStrQuestion();
tv1.setText("\n\t" + quizquestion);
tv1.setTextColor(Color.WHITE);
tv1.setSingleLine(false);
tv1.setLines(2);
tv1.setHorizontallyScrolling(false);
tv1.setTextSize(15);
tv1.setTypeface(null, Typeface.BOLD);
try {
//if the below value is null, it means that the selected answer is wrong
// and enters to the else block
if (triviaDict.get("correctAnswer") != null) {
String answer = (String) triviaDict.get("correctAnswer");
tv2.setText("\n\t" + "You said: "+ answer + "\n");
tv2.setTextColor(Color.WHITE);
tv2.setSingleLine(false);
tv2.setHorizontallyScrolling(false);
tv2.setTextSize(15);
tv2.setLines(2);
tv2.setTypeface(null, Typeface.BOLD);
tv3.setText("\t" +"That's Right."+ desc+"\n");
tv3.setTextColor(Color.WHITE);
tv3.setSingleLine(false);
tv3.setHorizontallyScrolling(false);
tv3.setTextSize(15);
tv3.setLines(2);
tv3.setTypeface(null, Typeface.BOLD);
tv4.setText("\t" + "_____________________________________" );
tv4.setTextColor(Color.WHITE);
tv3.setHorizontallyScrolling(false);
tv4.setTypeface(null, Typeface.BOLD);
} else {
String wronganswer = (String) triviaDict.get("selected");
tv2.setText("\n\t" + "You said:"+ wronganswer +"\n" );
tv2.setTextColor(Color.WHITE);
tv2.setTextSize(15);
tv2.setLines(2);
tv2.setSingleLine(false);
tv2.setTypeface(null, Typeface.BOLD);
tv3.setText("\t" + "Actually," + desc +"\n");
tv3.setTextColor(Color.WHITE);
tv3.setTextSize(15);
tv3.setLines(2);
tv3.setSingleLine(false);
tv3.setTypeface(null, Typeface.BOLD);
tv4.setText("\t" + "_____________________________________" );
tv4.setTextColor(Color.WHITE);
tv3.setHorizontallyScrolling(false);
tv4.setTypeface(null, Typeface.BOLD);
}
} catch (Exception e) {
e.printStackTrace();
}
tv1.setLayoutParams(new TableRow.LayoutParams(0,
android.view.ViewGroup.LayoutParams.WRAP_CONTENT,10));
tv2.setLayoutParams(new TableRow.LayoutParams(0,
android.view.ViewGroup.LayoutParams.WRAP_CONTENT,10));
tv3.setLayoutParams(new TableRow.LayoutParams(0,
android.view.ViewGroup.LayoutParams.WRAP_CONTENT,10));
row.addView(tv1);
row1.addView(tv2);
row2.addView(tv3);
row3.addView(tv4);
answerTable.addView(row);
answerTable.addView(row1);
answerTable.addView(row2);
answerTable.addView(row3);
}
但没有什么是完美的。这适用于第3版textview,但不适用于第1版。不知道发生了什么。
有人可以告诉我该怎么做。
更新
我对此代码没有任何问题,只是只有tv3才能进入大文本的下一行而不是tv1。 我希望tv1,tv2和tv3都能在下一行继续,以防大文本
答案 0 :(得分:0)
<Relativelayout>
<ScrollView
android:layout_marginTop="10dip" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_below="@+id/didyoudo"
android:layout_above="@+id/bardown" android:scrollbarFadeDuration="1000"
android:scrollbarSize="12dip">
<TableLayout android:id="@+id/answertable"
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:stretchColumns="0,*" >
</TableLayout>
</ScrollView>
<Relativelayout/>
****************************** JAVA code : ****************************
for (k =0; k< questionCount;k++ ) {
//tmpDict = trivialist.get(k);
Trivia trivia = trivialist.get(k);
TableRow row = new TableRow(getApplicationContext());
TextView tv1 = new TextView(getApplicationContext());
TextView tv2 = new TextView(getApplicationContext());
TextView tv3 = new TextView(getApplicationContext());
TextView tv4 = new TextView(getApplicationContext());
desc = trivia.getAnswerDesc();
quizquestion = trivia.getStrQuestion();
tv1.setText("\n\t" + quizquestion);
tv1.setTextColor(Color.WHITE);
tv1.setSingleLine(false);
tv1.setLines(2);
tv1.setHorizontallyScrolling(false);
tv1.setTextSize(15);
tv1.setTypeface(null, Typeface.BOLD);
try {
//if the below value is null, it means that the selected answer is wrong
// and enters to the else block
if (triviaDict.get("correctAnswer") != null) {
String answer = (String) triviaDict.get("correctAnswer");
tv2.setText("\n\t" + "You said: "+ answer + "\n");
tv2.setTextColor(Color.WHITE);
tv2.setSingleLine(false);
tv2.setHorizontallyScrolling(false);
tv2.setTextSize(15);
tv2.setLines(2);
tv2.setTypeface(null, Typeface.BOLD);
tv3.setText("\t" +"That's Right."+ desc+"\n");
tv3.setTextColor(Color.WHITE);
tv3.setSingleLine(false);
tv3.setHorizontallyScrolling(false);
tv3.setTextSize(15);
tv3.setLines(2);
tv3.setTypeface(null, Typeface.BOLD);
tv4.setText("\t" + "_____________________________________" );
tv4.setTextColor(Color.WHITE);
tv3.setHorizontallyScrolling(false);
tv4.setTypeface(null, Typeface.BOLD);
} else {
String wronganswer = (String) triviaDict.get("selected");
tv2.setText("\n\t" + "You said:"+ wronganswer +"\n" );
tv2.setTextColor(Color.WHITE);
tv2.setTextSize(15);
tv2.setLines(2);
tv2.setSingleLine(false);
tv2.setTypeface(null, Typeface.BOLD);
tv3.setText("\t" + "Actually," + desc +"\n");
tv3.setTextColor(Color.WHITE);
tv3.setTextSize(15);
tv3.setLines(2);
tv3.setSingleLine(false);
tv3.setTypeface(null, Typeface.BOLD);
tv4.setText("\t" + "_____________________________________" );
tv4.setTextColor(Color.WHITE);
tv3.setHorizontallyScrolling(false);
tv4.setTypeface(null, Typeface.BOLD);
}
} catch (Exception e) {
e.printStackTrace();
}
tv1.setLayoutParams(new TableRow.LayoutParams(0,
android.view.ViewGroup.LayoutParams.WRAP_CONTENT,10));
tv2.setLayoutParams(new TableRow.LayoutParams(0,
android.view.ViewGroup.LayoutParams.WRAP_CONTENT,10));
tv3.setLayoutParams(new TableRow.LayoutParams(0,
android.view.ViewGroup.LayoutParams.WRAP_CONTENT,10));
tv4.setLayoutParams(new TableRow.LayoutParams(0,
android.view.ViewGroup.LayoutParams.WRAP_CONTENT,10));
row.addView(tv1);
row.addView(tv2);
row.addView(tv3);
row.addView(tv4);
answerTable.addView(row);
}
答案 1 :(得分:0)
最后,我想出了一些答案。首先,我保持一个整数计数,以确定在一行中适合多少字符。之后计算字符串中的字符总数。然后将第一个整数计数除以字符串中的字符总数。然后你会得到一个整数。根据我的要求,我为该整数加了+2。然后将textview的行设置为最终获得的数字。
因此,问题解决了。