ListView的LayoutParams设置

 1                     // Temp is the root view that was found in the xml
 2                     final View temp = createViewFromTag(root, name, attrs, false);
 3
 4                     ViewGroup.LayoutParams params = null;
 5
 6                     if (root != null) {
 7                         if (DEBUG) {
 8                             System.out.println("Creating params from root: " +
 9                                     root);
10                         }
11                         // Create layout params that match root, if supplied
12                         params = root.generateLayoutParams(attrs);
13                         if (!attachToRoot) {
14                             // Set the layout params for temp if we are not
15                             // attaching. (If we are, we use addView, below)
16                             temp.setLayoutParams(params);
17                         }
18                     }

从上面可以看到,如果在inflate xml文件时,如果没有指定parent的时候,layout_width是不会生效的。

1 mInflater.inflate(R.layout.apps_listview_item, parent, false);

<com.helen.launcher4.TestLinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="160dp"
    android:orientation="horizontal"
    android:paddingTop="5dp"
    android:paddingBottom="5dp">

上面的160dp,如果没有指定parent,是不会生效。

当然这里的parent其实就只有一个目的,使layoutparam生效,其他毫无目的,所以随便指定一个view即可,这里android设计的不太好。

如果没有指定parent,layoutparam默认值是什么呢?

Listview是设计成一个可以上下滚动的viewgroup,所以width是占ListView所有的宽度,即MeasureSpec.EXACTLY

height呢?高度是MeasureSpec.UNSPECIFIED, size = 0.

也就是说,高度是随意定的。这会带来一个问题,当子节点使用match_parent的时候,子节点并不知道parent有多少高度,所以子节点的MeasureSpec会是UNSPECIFIED。

GridView在处理UNSPECIFIED的时候,很奇怪,并不是wrap_content。到底怎么处理,下面的文章再来细述。

时间: 2024-10-21 01:26:48

ListView的LayoutParams设置的相关文章

android中scrollview包含listView对高度设置

当scrollview中包含listView时,滑动的时候会出现问题..最常见的问题是listview滑动不了...问题原因是在加载listview时它的高度应该按照adapter所绑定的数据来确定,而不是fill_parent或者是wrap_content... 项目中用到了就把它抽取出来做个记录 import android.view.View; import android.view.ViewGroup; import android.widget.ListAdapter; import

结合子类父类和LIstView适配器相关设置,初步体验类的多态。

在初级阶段,我们常对listview的适配器都是在一个activity类中全部写满.当你接触项目多了,你会发现大神都把各种适配器放一个包里,要用直接传如相关参数到适配器的构造方法设置ListView.今天做了个简单的demo,对于菜鸟理解多态有帮助.在MainActivity中代码如下 public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState)

Android应用之——利用getItemViewType为Listview的item设置不同的布局

一.概述 在项目的需求中,有一处需要显示一个交易记录的列表,这个列表很容易让人联想到用listview来实现,但是这个列表又有稍许不同的地方,那就是它里面的item并不是一样的布局,其中某些部分显示的是消费的记录,而有些地方显示的是充值的记录,也就对应了不同的item布局.而且,这两处地方都是从服务端获取数据的,这两个item的数据对应的类内容也各不相同,该怎么处理呢? 下面来一步步实现这个效果. 二.先看效果图 三.实现步骤 实现的原理就是listview的adapter中的一个关键的方法就是

Android 中关于ListView分割线的设置

今天发现许多App上的listview的item之间的分割线都只显示了右边一部分,而左边的那一半则没有,第一反应则是给分割线设置一张背景图片就ok了: android:divider="@mipmap/line" 然而,后来网上找找资料后发现,可以自己去定义一个drawable,将其设置为listview的分割线(divider) 效果图: 1.drawable下的listview_item_divider: 1 <?xml version="1.0" enc

scrollview嵌套listview时 动态设置listview高度

public class GetListViewHeight { public static void setListViewHeightBasedOnChildren(ListView listView) { ListAdapter listAdapter = listView.getAdapter(); if (listAdapter == null) { // pre-condition return; } int totalHeight = 0; for (int i = 0; i <

listview 滑动以后设置最上面一行为整行展示

需求: listview显示的第一行永远为整行,不能为半行. 参考: android listview 每次滑动整行 1. 添加 listview 的 setOnScrollListener() 事件 2. @Override onScrollStateChanged() 方法 @Override public void onScrollStateChanged(final AbsListView view, int scrollState) { if (scrollState == SCROL

ListView的ScrollBar设置

默认ListView的滑动时,右侧会有滑动条显示,等ListView滑动结束时,滑动条消失.修改ScrollBar的显示可以在XML以及CODE中实现. CODE中实现:1.setFastScrollEnabled(value):value = true:ScrollBar滑动时显示,停止时消失:value = false:ScrollBar滑动时显示,停止时消失.这两种显示效果不同,当value为true时,ScrollBar有背景框存在. 2.setFastScrollAlwaysVisib

Android 设置ListView不可滚动 及在ScrollView中不可滚动的设置

http://m.blog.csdn.net/blog/yusewuhen/43706169 转载请注明出处: http://blog.csdn.net/androiddevelop/article/details/38815493 希望得到的效果是ListView不能滚动,但是最大的问题在与ListView Item还必有点击事件,如果不需要点击事件那就简单了,直接设置ListView.setEnable(false); 如果还需要点击事件,滚动与点击都是在ListView Touch处理机制

Listview 常用设置

最佳实践 listview设置android:descendantFocusability="afterDescendants"或item的根布局设置="blocksDescendants" listview设置android:listSelector="#0000",然后在item的background中设置带选择器的背景 listview设置android:divider="#0000"及android:dividerHe