您的位置:首页 > 其它

RecyclerView wrap_content

2016-03-24 12:46 375 查看
RecyclerView内容包裹根据其内容而填充大小,网上各种奇葩方案要么重写layoutManager反复测量child要么丢失divider要么性能低下
在这里给出google官方的解决方案是在supportlib>23.2.0
compile'com.android.support:recyclerview-v7:23.2.0'
最关键的一句:
RecyclerView.LayoutManagerlayoutManager=newLinearLayoutManager(this);layoutManager.setAutoMeasureEnabled(true);
源码:
*@paramenabled<code>True</code>iftheLayoutshouldbemeasuredbythe*RecyclerView,<code>false</code>iftheLayoutManagerwants*tomeasureitself.**@see#setMeasuredDimension(Rect,int,int)*@see#isAutoMeasureEnabled()*/publicvoidsetAutoMeasureEnabled(booleanenabled){mAutoMeasure=enabled;}
例子:
activity_test.xml
<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"><android.support.v7.widget.RecyclerViewandroid:id="@+id/rv"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="#6cf"></android.support.v7.widget.RecyclerView></LinearLayout>
activity
packagegitosctest.gitosc_studyproject;importandroid.app.Activity;importandroid.os.Bundle;importandroid.support.v7.widget.LinearLayoutManager;importandroid.support.v7.widget.RecyclerView;importandroid.view.LayoutInflater;importandroid.view.View;importandroid.view.ViewGroup;importandroid.widget.TextView;/***@authorxuanyouwu*@emailxuanyouwu@163.com*@time2016-03-2412:30*/publicclassTestActivityextendsActivity{@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_test);RecyclerViewrecyclerView=(RecyclerView)findViewById(R.id.rv);RecyclerView.LayoutManagerlayoutManager=newLinearLayoutManager(this);layoutManager.setAutoMeasureEnabled(true);recyclerView.setLayoutManager(layoutManager);recyclerView.setAdapter(newMyAdapter());}classMyAdapterextendsRecyclerView.Adapter<MyAdapter.MyHolder>{classMyHolderextendsRecyclerView.ViewHolder{TextViewtextView;publicMyHolder(ViewitemView){super(itemView);textView=(TextView)itemView.findViewById(R.id.textView);}}@OverridepublicMyHolderonCreateViewHolder(ViewGroupparent,intviewType){Viewv=LayoutInflater.from(parent.getContext()).inflate(R.layout.item_string,parent,false);returnnewMyHolder(v);}@OverridepublicvoidonBindViewHolder(MyHolderholder,intposition){holder.textView.setText("item:"+position);}@OverridepublicintgetItemCount(){return3;}}}
效果图:
当recyclerView嵌套在scrollView中依旧可以展现出wrap_content
如:

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