0

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

<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 上,我最终得到一个空对话框,但是对话框的大小似乎取决于对象中实际包含的数据,好像所有行都在那里,但设置为“不可见”而不是“消失”或“可见”。

4

0 回答 0