0

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 );
4

2 に答える 2

0

こんにちは、ご協力いただきありがとうございます。コードを以下のように変更しましたが、現在は機能しています:)

Display display = ((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int height=0;
int width = display.getWidth(); 
switch (metrics.densityDpi) 
{ 
case DisplayMetrics.DENSITY_HIGH:
height = display.getHeight() - (48*2);
break;
case DisplayMetrics.DENSITY_MEDIUM:
height = display.getHeight() - (32*2);                              
break;
case DisplayMetrics.DENSITY_LOW:
height = display.getHeight() - (24*2);
break;
default:
height = display.getHeight() - (48*2);
}
FrameLayout.LayoutParams parameters = new FrameLayout.LayoutParams((int)(width),(int)(height));
ListView listview=(ListView) getListView();
listview.setLayoutParams(parameters );
于 2012-07-03T06:09:19.087 に答える
0

Javaで:

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int s_width,s_height;
s_width = metrics.widthPixels;
s_height = metrics.heightPixels/3;
TableRow.LayoutParams parameters = new TableRow.LayoutParams(s_width,s_height);
LinearLayout b_list_table=(LinearLayout) findViewById(R.id.b_list_table);
b_list_table.setLayoutParams(parameters);

XMLで:

<?xml version="1.0" encoding="utf-8"?>
   <RelativeLayout
   xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   >

   <LinearLayout
       android:orientation="vertical"
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       android:layout_alignParentBottom="false"
       >






       <TableRow
           android:layout_width="match_parent"
           android:layout_height="180dip"
           android:id="@+id/b_list_table"
           >
           <ListView android:id="@+id/list"
               android:layout_width="match_parent"
               android:layout_height="wrap_content"
               android:layout_weight="1"
               android:drawSelectorOnTop="false"/>
       </TableRow>






       <TableRow
           android:layout_width="fill_parent"
           android:layout_height="wrap_content"
           >
           <ListView android:id="@+id/listf"
               android:layout_width="match_parent"
               android:layout_height="wrap_content"

               android:layout_weight="1"
               android:drawSelectorOnTop="false"/>
       </TableRow>

   </LinearLayout>

于 2014-08-16T15:26:45.783 に答える