DialogFragment中listView下面的按钮

时间:2014-10-17 17:31:53

标签: android android-layout

我正在尝试编写一个dialogFragment,其中包含ListView和ListView下面的按钮。 该按钮必须始终可见,这意味着您可以滚动ListView但按钮始终可见。

对话必须调整其高度。这意味着如果listView只包含少数元素(1或2个元素),则DialogFragment不应该填满整个屏幕高度......

这是我的代码:

  

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <LinearLayout
        android:orientation="vertical"
        android:padding="@dimen/fragment_default_padding"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <ImageView
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:src="@drawable/Back_arrow"
            android:id="@+id/imgBack" />
        <TextView
            android:text="@string/this_pizzeria_require_a_phone_number_inorderto_accept_orders"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            style="@style/default_title" />
        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/edtPhoneNumber"
            android:layout_marginBottom="4dp"
            android:singleLine="true"
            android:imeOptions="actionDone"
            android:hint="@string/choose_from_the_below_list_or_insert_a_new_one_here"
            android:inputType="phone" />
        <ListView
            android:id="@+id/lvPhones"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_above="@+id/btnAdd"
            android:dividerHeight="1dp" />
        <Button
            android:id="@+id/btnDone"
            android:text="@string/done"
            style="@style/default_button" />
    </LinearLayout>
</RelativeLayout>

此代码工作正常,但如果listView包含大量项目,则下面的按钮消失。 这是对话框的屏幕: enter image description here

正如您所看到的那样,按钮被拉伸,并且向listView添加了另一个项目,它就会消失。

有没有办法实现我的目标?

非常感谢!

3 个答案:

答案 0 :(得分:0)

我个人并不关心你的布局。我认为你应该在linearLayout中将它分开一些。但是每当我遇到这个问题时,我都会添加

android:layout_weight="1"

通常会解决。

    <Button
        android:id="@+id/btnDone"
        android:text="@string/done"
        android:layout_weight="1"
        style="@style/default_button" />

答案 1 :(得分:0)

我通常会为此目的使用RelativeLayout。您可以更好地控制元素的排列方式。

无论出于何种原因(我从未调查过,使用RelativeLayout工作而不会浪费时间)ListViews将始终延伸到LinearLayout的底部(我认为是出于目的)

在你的情况下,你可以将按钮从线性移动到容器视图我认为(这是一个相对布局)并对齐到底部 - 最顶层的RelativeLayout无论如何在你的代码中是无用的: - )

答案 2 :(得分:0)

使用AlertDialog.BuildersetView()指向您的布局,删除按钮,setPositiveButton()作为“完成”按钮。这种方式按钮始终位于底部,对话框会自动调整高度。

public class YourDialogFragment extends DialogFragment implements ... {
    ...
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        AlertDialog dialog = new AlertDialog.Builder(getActivity())
            .setTitle("login")
            .setView(createDialogView())
            .setPositiveButton(R.string.done, this)
            .create();
        dialog.setCancelable(true);
        return dialog;
    }

    private View createDialogView() {
        final LayoutInflater inflater = getActivity().getLayoutInflater();
        View contentView = inflater.inflate(R.layout.content, null);

        ...
        ListView listView = (ListView) contentView.findViewById(R.id.lvPhones);
        listView.setAdapter(adapter);
    }