【问题标题】:ListView height androidListView高度android
【发布时间】: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,我的列表视图不会出现。我只是得到一个空白屏幕。

标签: android listview


【解决方案1】:

大家好,感谢您的帮助 我改变了我的代码如下,现在它的工作:)

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

【讨论】:

    【解决方案2】:

    在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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-28
      • 2011-07-26
      • 2011-03-22
      • 2013-10-07
      • 1970-01-01
      • 2015-09-11
      相关资源
      最近更新 更多