我正在尝试编写一个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包含大量项目,则下面的按钮消失。 这是对话框的屏幕:
正如您所看到的那样,按钮被拉伸,并且向listView添加了另一个项目,它就会消失。
有没有办法实现我的目标?
非常感谢!
答案 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.Builder
,setView()
指向您的布局,删除按钮,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);
}