将相同的高度设置为TableLayout的一行中的TextView和EditText?

时间:2013-07-12 09:54:23

标签: android android-layout android-edittext textview android-tablelayout

我需要一个带有TextViews和EditTexts的TableLayout,它应该像一个填字游戏。

我用LinearLayout, width=0dp and weight=1,对此进行了测试,但它并没有像我想要的那样有效。然后我用TableLayout尝试了它,我想我接近解决方案。我已经在XML或Java中测试了高度和宽度,但它没有用。我现在的问题是所有TextView都比EditText更薄,我不知道为什么以及如何让它们看起来一样。

XML的文件:

<!-- activity_sraetsel_main.xml -->
<TableLayout    xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/table"
            android:layout_width="fill_parent" 
            android:layout_height="fill_parent" 
            android:orientation="vertical" >        
</TableLayout>

<!-- activity_sraetsel_row.xml -->
<?xml version="1.0" encoding="utf-8"?>
<TableRow   xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/tableRow"
        android:layout_height="fill_parent"
        android:layout_width="fill_parent"
        android:gravity="center_horizontal">
</TableRow>

<!-- activity_sraetsel_edittext.xml -->
<?xml version="1.0" encoding="utf-8"?>
<EditText   xmlns:android="http://schemas.android.com/apk/res/android"
        android:background="@drawable/cell_border"
        android:id="@+id/textView"
        android:inputType="textCapCharacters"
        android:gravity="center_horizontal"
        android:maxLength="1">
</EditText>

<!-- activity_sraetsel_textview.xml -->
<?xml version="1.0" encoding="utf-8"?>
<TextView   xmlns:android="http://schemas.android.com/apk/res/android"
        android:background="@drawable/cell_border"
        android:id="@+id/textView"
        android:textSize="6.5sp"
        android:singleLine = "false" >
</TextView>

<!-- cell_border.xml -->
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#FFFFFF"/>
<stroke android:width="1dp" android:color="#515151"/>
<padding android:left="10dp" android:top="5dp"
android:right="10dp" android:bottom="5dp" />
</shape>

和java部分,我把它们放在一起:

TableLayout table = (TableLayout) this.findViewById(R.id.table);
for (int y = 0; y < hoehe; y++) {
    // Inflate your row "template" and fill out the fields.
    TableRow row = (TableRow) LayoutInflater.from(this).inflate(R.layout.activity_sraetsel_row, null);
    for (int x = 0; x < breite; x++) {
        if (raetsel[y][x].startsWith(",", 1)) {
            EditText eText = (EditText) LayoutInflater.from(this).inflate(R.layout.activity_sraetsel_edittext, null);
            if (!(raetsel[y][x].startsWith("a"))) {
                eText.setText(raetsel[y][x].substring(0, 1));
            } //if
            eText.setWidth(60);
            eText.setHeight(60);
            row.addView(eText);
            Log.d(TAG, "SRaetselMain, AntwortFeld erstellt");
        } else {
            TextView vText = (TextView) LayoutInflater.from(this).inflate(R.layout.activity_sraetsel_textview, null);
            vText.setText(raetsel[y][x].substring(0, raetsel[y][x].indexOf("|")));
            vText.setWidth(60);
            vText.setHeight(60);
            row.addView(vText);
            Log.d(TAG, "SRaetselMain, FrageFeld erstellt");
        } //if
    } //for
    table.addView(row);
} //for

table.requestLayout();

最后看起来如何:

EDIT1: 使用android:layout_height="match_parent"表示XML中的TextView,而没有用于Activity中TextView的setHeight():

http://i.stack.imgur.com/btzj4.png

EDIT2: 对于android:layout_weight="1"android:layout_height="0dp",它看起来与EDIT1

相同

现在我已经在没有TextViews的情况下进行了测试,只使用了EditText,我发现问题是textSize。如果我在没有选项android:textSize="6.5sp"的情况下制作TextView就行了。但后来文字很大,不幸的是我需要这个文字很小。

EDIT3: 我用LinearLayout和两个TextView尝试过这个。 我真的不知道如何改变这两个观点处于同一高度。

http://i.stack.imgur.com/wIENf.png

感谢您对此事的帮助。

2 个答案:

答案 0 :(得分:2)

回答我自己的问题:

问题解决了这个问题:android:baselineAligned="false" 把这一行放到这个XML中就行了!

 <!-- activity_sraetsel_row.xml -->
<?xml version="1.0" encoding="utf-8"?>
<TableRow   xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/tableRow"
    android:layout_height="fill_parent"
    android:layout_width="fill_parent"
    android:gravity="center_horizontal"
    android:baselineAligned="false">
</TableRow>

感谢您的帮助!

答案 1 :(得分:0)

在{+ 1}}中使用android:layout_height="match_parent"并删除TextViewsetHeight()的{​​{1}}。因为,您手动设置TextView的大小,所以不需要对其进行更改。通过这样做Activity将占用EditText的所有空间。

修改

TextView

尝试将height设为<!-- activity_sraetsel_edittext.xml --> <?xml version="1.0" encoding="utf-8"?> <EditText xmlns:android="http://schemas.android.com/apk/res/android" android:background="@drawable/cell_border" android:id="@+id/textView" android:inputType="textCapCharacters" android:gravity="center_horizontal" android:layout_width="60dp" android:layout_height="0dp" android:layout_weight="1" android:maxLength="1"> </EditText> <!-- activity_sraetsel_textview.xml --> <?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:background="@drawable/cell_border" android:id="@+id/textView" android:textSize="6.5sp" android:layout_width="60dp" android:layout_height="0dp" android:layout_weight="1" android:singleLine = "false" > </TextView> ,将layout_height设为0dp

如果您希望layout_weight两个身高相同,那么1可以提供帮助。