我在 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 );