FrameLayout 内に FrameLayout と Listview があります。リストビューに別のレイアウトを設定します。問題は、layout_height を wrap_content に設定すると、1 つのレコードに対して getview が複数回呼び出され、layout_height を fill_parent または wrap_content に設定すると、1 つのレコードに対して getview が 3 回呼び出されることです。layout_height を dp 値に設定すると、正常に動作します。つまり、パフォーマンスに問題はなく、getview はレコードに対して 1 回だけ呼び出されます。だから私はプログラムで画面の高さと幅を取得します
Display display = ((WindowManager)getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
int width = display.getWidth();
int height = display.getHeight();
しかし、上記のコードを使用して測定した値でリストビューの幅と高さを設定すると、リストビューの最後のレコードが部分的に表示されなくなります。これは、取得した画面の高さに、タイトル バーの高さ、ステータス バーの高さ、通知バーの高さが含まれているためだと思います。
それが問題である場合、誰かが利用可能な画面の高さを計算するのを手伝ってくれますか? 画面の高さ-タイトルバーの高さ-ステータスバーの高さ-通知バーの高さですか? 他の問題は何ですか? 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 );