【发布时间】:2014-08-16 23:26:45
【问题描述】:
我在 FrameLayout 中有一个 FrameLayout 和一个 Listview。 我用另一个布局填充 Listview。 问题是,如果我将 layout_height 设置为 wrap_content,我的 getview 将被多次调用以获取单个记录,如果我将 layout_height 设置为 fill_parent 或 wrap_content,我的 getview 将被调用 3 次以获取单个记录。如果我将 layout_height 设置为某个 dp 值,它工作正常。我的意思是我的性能没有任何问题,我的 getview 只被调用一次以记录。 所以我使用
以编程方式获取屏幕高度和宽度Display display = ((WindowManager)getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
int width = display.getWidth();
int height = display.getHeight();
但是,如果我将 Listview 的宽度和高度设置为使用上述代码测量的值,则我的 Listview 的最后一条记录部分不可见。 我猜这应该是因为获取的屏幕高度包括标题栏高度、状态栏高度和通知栏高度。
如果这是问题,有人可以帮我计算可用的屏幕高度吗?那就是屏幕高度-标题栏高度-状态栏高度-通知栏高度? 还有什么问题?为什么我的 ListView 中的最后一条记录不完全可见?
XML 文件
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/listview"
android:background="#ffffff"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
<ListView android:id="@+id/android:list"
android:background="#ffffff"
android:layout_weight="1"
android:layout_width="fill_parent"
android:layout_height="300dp"
android:clickable="true"
android:fastScrollEnabled="true"
android:smoothScrollbar="true"
/>
</FrameLayout>
然后我在我的 java 代码中将列表视图的 layout_height 和 layout_width 设置为
Display display = ((WindowManager)getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
int width = display.getWidth();
int height = display.getHeight();
FrameLayout.LayoutParams parameters = new FrameLayout.LayoutParams((int)(width),(int)(height));
ListView listview=(ListView) getListView();
listview.setLayoutParams(parameters );
【问题讨论】:
-
你能发布你的listview xml吗?还有其他与此相关的代码吗?
-
我在 3 次生成时遇到了同样的问题。我也很感兴趣如何解决这个问题。
-
如果将高度设置为“0dp”会怎样?
-
@BlaineAnderson 我已经更新了我的代码
-
@Atlos 如果我将高度设置为 0dp,我的列表视图不会出现。我只是得到一个空白屏幕。