您的位置:首页 > 移动开发 > Android开发

android自定义view的几种方式

2014-03-25 16:44 453 查看
convertView = LayoutInflater.from(mContext).inflate(R.layout.list_view_item, null);
XXXX = (ItemView)convertView;


假如我想自定义一个listview,我之前的做法是:

方法一:

(1)对这个listview设置一个adapter,adapter里面需要编写getview()

(2)getview里面肯定需要设置一个convertview,而这个convertview就是我们自己需要自己写的listview中的每一个itemView

(3)itemView的写法,之前是单独写一个itemView的类,继承自framelayout(当然也可以是其他的布局,我习惯用framelayout),还需要写一个布局文件view.xml,在itemView生成的时候,将view.xml加入到itemView中,

addView(LayoutInflater.from(mContext).inflate(R.layout.view, null));
(4)然后再对view中的其他元素进行调整和赋值,当然这些都是在itemView中进行的,参数是从adapter中传进来的

今天无意之中看到网上另外一种方法,虽然有些绕,但是貌似可以省去一层布局:

方法二:

(1)(2)同上

(3)同样写一个itemView,不过布局需要按照具体的形式来写,比如这个view是一个线性布局,那么这里就要继承自线性布局

(4)然后写一个view.xml

引用一个网友的话:(lei215:http://www.eoeandroid.com/thread-48681-1-1.html)

比如你 自定义一个view叫myView ,路径是,com.test.view.MyView,此view是继承LinearLayout,定义的布局文件是my_view.xml

里面内容是:

<com.test.view.MyView>

        <xxxx />

</com.test.view.MyView>
就是需要把view.xml的根布局直接换成itemView,然后在里面编写你自己的view

(5)然后在convertview的getview里面“MyView mv = (MyView)View.inflate (context,R.layout.my_view,null);”

convertView = LayoutInflater.from(mContext).inflate(R.layout.list_view_item, null);
XXXX = (ItemView)convertView;


这种写法貌似比方法一难理解一些,因为他把inflate的过程放在了使用这个view的地方。

而且itemView.java和view.xml相当于并列的关系,还互相引用,然后交汇于使用的地方,如adapter的getview。

这种写法貌似耦合度有点高。

不过好处就是省了方法一中的一层framelayout,效率要高一点。

唉,我也不知道哪个好,郁闷
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: