对话框中的TextViews不会在Android 2.3及更低版本上显示

时间:2013-09-09 01:08:39

标签: android android-layout

我有一组对象,其信息可以在用户选择对象时显示在对话框中。我的对话框的布局如下:

<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scrollbars="vertical"
>

<TableLayout
    android:id="@+id/overlay_item_dialog_table"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:paddingLeft="10sp"
    android:paddingRight="10sp"
    >

    <TableRow   android:id="@+id/overlay_item_dialog_object_id_row"
                android:visibility="gone">
        <TextView
            android:id="@+id/overlay_item_dialog_object_id_label"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="@string/overlay_label_object_id" 
            android:textSize="12sp"
            android:layout_gravity="right"/>
        <TextView
            android:id="@+id/overlay_item_dialog_object_id"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:textSize="12sp"
            android:paddingLeft="10sp"
            android:layout_gravity="left"/>
    </TableRow>

    <TableRow   android:id="@+id/overlay_item_dialog_latitude_row"
                android:visibility="gone">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="12sp"
            android:text="@string/label_latitude" 
            android:layout_gravity="right"
        />
        <TextView
            android:id="@+id/overlay_item_dialog_latitude"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:textSize="12sp"
            android:paddingLeft="10sp"
            android:layout_gravity="left"/>
    </TableRow>

    <TableRow   android:id="@+id/overlay_item_dialog_longitude_row"
                android:visibility="gone">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="12sp"
            android:text="@string/label_longitude"
            android:layout_gravity="right" />
        <TextView
            android:id="@+id/overlay_item_dialog_longitude"
            android:layout_width="fill_parent" 
            android:layout_height="wrap_content"
            android:textSize="12sp"
            android:paddingLeft="10sp"
            android:layout_gravity="left"/>
    </TableRow>

    <TableRow   android:id="@+id/overlay_item_dialog_date_row"
                android:visibility="gone">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="12sp"
            android:text="@string/label_date"
            android:layout_gravity="right" />
        <TextView
            android:id="@+id/overlay_item_dialog_date"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:textSize="12sp"
            android:paddingLeft="10sp"
            android:layout_gravity="left"/>
    </TableRow>

    <TableRow   android:id="@+id/overlay_item_dialog_time_row"
                android:visibility="gone">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="12sp"
            android:text="@string/label_time"
            android:layout_gravity="right" />
        <TextView
            android:id="@+id/overlay_item_dialog_time"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:textSize="12sp"
            android:paddingLeft="10sp"
            android:layout_gravity="left"/>
    </TableRow>

    <TableRow   android:id="@+id/overlay_item_dialog_direction_row"
                android:visibility="gone">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/label_direction" 
            android:textSize="12sp"
            android:layout_gravity="right"/>
        <TextView
            android:id="@+id/overlay_item_dialog_direction"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:textSize="12sp"
            android:paddingLeft="10sp"
            android:layout_gravity="left"/>
    </TableRow>

    <TableRow   android:id="@+id/overlay_item_dialog_speed_row"
                android:visibility="gone">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/label_speed" 
            android:textSize="12sp"
            android:layout_gravity="right"/>
        <TextView
            android:id="@+id/overlay_item_dialog_speed"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:textSize="12sp"
            android:paddingLeft="10sp"
            android:layout_gravity="left"/>
    </TableRow>

</TableLayout>

</ScrollView>

对话框本身是android.support.v4.app.DialogFragment。对于布局中可见性设置为“已消失”的每一行,这些是可选字段,我会执行以下操作以使其在必要时可见(这在我的onCreateDialog方法中使用):

if ( position.hasSpeed() )
{
        ( (TableRow) rootView.findViewById( R.id.overlay_item_dialog_speed_row ) ).setVisibility( View.VISIBLE );
        ( (TextView) rootView.findViewById( R.id.overlay_item_dialog_speed ) ).setText( position.getSpeedString() );
}

这些参数非常常见,但是可选,我希望在其他所有参数之前出现,这就是为什么它们会以这种方式处理。

其他参数按如下方式处理,其中“layout”是名为“overlay_item_dialog_table”的TableLayout,取自通过调用getActivity()获得的根视图.getLayoutInflater()。inflate(R.layout.overlay_item_dialog,null )

for ( PositionParameter param : position.getPositionParameters().values() )
    {
        if ( param.getValue() != null && param.getValue().trim().length() != 0 )
        {
            TableRow tableRow = new TableRow( context );

            TextView labelView = new TextView( context );
            TextView valueView = new TextView( context );

            TableRow.LayoutParams params = new TableRow.LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT );
            params.gravity = Gravity.RIGHT;
            labelView.setLayoutParams( params );
            labelView.setTextSize( 12 );

            params = new TableRow.LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT );
            params.gravity = Gravity.LEFT;
            valueView.setLayoutParams( params );
            valueView.setPadding( 10, 0, 0, 0 );
            valueView.setTextSize( 12 );

            labelView.setText( param.getLabel() + ":" );
            valueView.setText( param.getValue() );

            tableRow.addView( labelView );
            tableRow.addView( valueView );

            layout.addView( tableRow );
        }
    }

在Android 4.0及更高版本中,这样可以正常使用。我能够看到我期望的所有行。我的问题是在Android 2.2和2.3上,我最终得到一个空对话框,但是对话框的大小似乎取决于对象中实际存在的数据,就好像所有行都在那里,但设置为“隐形“而不是”消失“或”可见“。

0 个答案:

没有答案