我有一个带有listview的简单片段对话框,EditText和两个按钮(接受和取消)。
我希望我的布局看起来像这样: Listview在上面 EditText就在下面 和 按钮在编辑文本下面并排。
现在我的问题是listview可以有0或100个元素。 所以,如果我把它们放在一个垂直的LinearLayout中,并且listview有很多元素,那么edittext和button就会被推出视图之外。如果我使用相对布局并且说编辑文本在父视图底部和列表视图下方对齐,那么100个元素看起来没问题但是当列表视图为空时,对话框将使用所有屏幕空间。
以下是使用relativeLayout时我的代码示例。还有另一种方法是使id为“below”的linearLayout低于listview但仍然可见(如果列表视图有很多项)而不使用alignParentBottom =“true”,因为这是布局延伸到的原因全屏。
<?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"
android:orientation="vertical" >
<ListView
android:id="@+id/ListViewPreNotes"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_above="@+id/bottom" />
<LinearLayout
android:id="@+id/below"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_alignParentBottom="true">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="left"
android:padding="3dp">
<TextView
android:layout_height="@dimen/label_height"
android:layout_width="130dip"
android:text="@string/note"
android:layout_marginLeft="10dip"
android:gravity="center_vertical"
android:textSize="@dimen/text_size_large"/>
<EditText
android:id="@+id/OMnote"
android:layout_height="wrap_content"
android:layout_width="200dp"
android:textSize="@dimen/text_size_large"
android:inputType="textNoSuggestions|textCapSentences"
android:selectAllOnFocus="true"
android:hint="@string/note"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:baselineAligned="false">
<Button
android:id="@+id/dialogButtonClose"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="50dp"
android:text="@string/ok"
style="?android:attr/borderlessButtonStyle"
android:textStyle="bold" />
<Button
android:id="@+id/dialogButtonCancel"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="50dp"
android:text="@string/cancel"
android:textStyle="bold"
style="?android:attr/borderlessButtonStyle" />
</LinearLayout>
</LinearLayout>
</RelativeLayout>
答案 0 :(得分:2)
在未找到记录时将ListView.Visibility设置为Gone并使用RelativeLayout并对齐父底部。
答案 1 :(得分:1)
您可以在其页脚中添加需要在ListView下方显示的内容。您可以像这样添加它。
View footerView = ((LayoutInflater) ActivityContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.footer_layout, null, false);
ListView.addFooterView(footerView);
答案 2 :(得分:0)
您可以使用FrameLayout作为根,然后您可以将LinearLayouts置于ListView之上。 http://developer.android.com/reference/android/widget/FrameLayout.html
答案 3 :(得分:0)
Arsalan Shah提出了一些建议。
这是我如何解决问题的最终版本(一种hacky):
首先,我检查列表视图中有多少元素,然后根据具体情况而定,具体取决于设备和方向模式(纵向或横向)我在我的问题或其他布局中填充Arsalan Shah建议的listview页脚。
实施例: 如果设备低于7&#34;并且它处于横向模式,我列表中的项目数量超过4我将使用我的布局,否则我将使用Arsalan Shah建议。我测试了布局/设备应该用于什么布局的项目数量,以便为我的设计找到最佳案例场景。
希望这有助于其他可能遇到同样问题的人。 如果有人建议如何在一个布局中完成所有这些,那么请在下面评论。