2

我开始为 Android 开发。我不想创建我的那种模式警报(如 iOS 中的 UIAlertView)。我考虑过使用 Activity 效果很好。我花了一些时间来做到这一点。但后来,我找到了一个更好的解决方案,使用 DialogFragment。我将我的活动更改为对话框片段,并修改了与片段相关的所有必需部分。它工作正常。除了我片段中的 ListView 不再滚动!问题可能是什么?

注意:它已经在 Activity 解决方案中工作。没有滚动视图。

这是 XML:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginBottom="@dimen/modal_list_outter_frame_margin_vertical"
    android:layout_marginLeft="@dimen/modal_list_outter_frame_margin_horizontal"
    android:layout_marginRight="@dimen/modal_list_outter_frame_margin_horizontal"
    android:layout_marginTop="@dimen/modal_list_outter_frame_margin_vertical"
    android:background="@drawable/modal_list_outter_frame"
    android:gravity="center"
    android:orientation="vertical"
    android:paddingBottom="@dimen/modal_list_padding_bottom" >

    <TextView
        android:id="@+id/title_text_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="@dimen/modal_list_title_horizontal_margin"
        android:layout_marginRight="@dimen/modal_list_title_horizontal_margin"
        android:layout_marginTop="@dimen/modal_list_title_top_margin"
        android:gravity="center"
        android:maxLines="@integer/modal_list_title_number_of_lines"
        android:shadowColor="@color/modal_list_text_shadow_color"
        android:shadowDx="0"
        android:shadowDy="@integer/modal_list_title_shadow_offset_y"
        android:shadowRadius="@integer/modal_list_title_shadow_radius"
        android:text="@string/modal_list_title_small"
        android:textColor="@color/modal_list_text_color"
        android:textSize="@dimen/modal_list_title_font_size"
        android:textStyle="bold" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="@dimen/modal_list_inner_frame_margin_bottom"
        android:layout_marginLeft="@dimen/modal_list_inner_frame_margin_horizontal"
        android:layout_marginRight="@dimen/modal_list_inner_frame_margin_horizontal"
        android:layout_marginTop="@dimen/modal_list_inner_frame_margin_top"
        android:background="@drawable/modal_list_inner_frame"
        android:gravity="center"
        android:orientation="vertical"
        android:paddingBottom="@dimen/modal_list_padding_bottom" >

        <ListView 
            android:id="@+id/list_view"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="@dimen/modal_list_list_view_margin_horizontal"
            android:layout_marginRight="@dimen/modal_list_list_view_margin_horizontal"
            android:layout_marginTop="@dimen/modal_list_list_view_margin_top"
            android:divider="@null"
            android:dividerHeight="0dp" 
            android:listSelector="@color/modal_list_selector_color_selected"
            >

        </ListView>

    </LinearLayout>

</LinearLayout>

更新:我发现了一些非常奇怪的东西!这就像片段是透明的!如果我点击片段中的任何内容,似乎我正在点击它下方的按钮!这是我用来显示片段的代码:

FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.addToBackStack("SingleSelectionCustomRowModalList");
modalList = ASModalList.newInstance(modalListStateForCustomRow) ;
modalList.show(ft, "SingleSelectionCustomRowModalList");

更新 2:问题似乎是 DialogFragment 不是模态的。我正在使用这种风格:

int style = DialogFragment.STYLE_NO_TITLE | DialogFragment.STYLE_NO_FRAME;
setStyle(style, R.style.ASModaListDialogStyle);

使用的主题是:

<style name="ASModaListDialogStyle" parent="@android:style/Theme.Dialog">
    <item name="android:windowBackground">@drawable/modal_list_background_view</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowTitleStyle">@null</item>
    <item name="android:colorBackgroundCacheHint">@null</item>
    <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
    <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
    <item name="android:gravity">center</item>
</style>

我正在使用这个主题使对话框的背景变暗。

4

3 回答 3

1

没有答案的老问题实际上对我有用。希望它会帮助某人。

解决方法是将列表高度设置为0dp,并添加一个权重字段。并去掉内层LinearLayout。这样,外部LinearLayout可以为列表设置正确的大小,并且它会滚动。

<android.support.v7.widget.ListViewCompat
    android:id="@+id/ev_list"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:layout_marginLeft="16dp"
    android:layout_marginRight="16dp"/>
于 2016-02-04T23:32:38.473 回答
0

请提供一些代码,否则很难说什么是错的。例如布局 XML 或您的 DialogFragment 类。

于 2013-07-06T11:54:06.507 回答
0

它以非模态对话框结束。使用以下方法修复它:

int style = DialogFragment.STYLE_NORMAL | DialogFragment.STYLE_NO_FRAME;
    setStyle(style, R.style.ASModaListDialogStyle);
于 2013-07-06T13:53:28.367 回答