我有一个卡片视图类,看起来像:
public class CardTest extends linearLayout { public CardTest(Context context) { super(context); LayoutInflater.from(getContext()).inflate(R.layout.card_main, this); }}
card_main.xml如下:
<linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" xmlns:tools="http://schemas.androID.com/tools" xmlns:card_vIEw="http://schemas.androID.com/apk/res-auto" androID:layout_height="wrap_content" androID:layout_wIDth="fill_parent" androID:orIEntation="vertical" > <androID.support.v7.Widget.CardVIEw androID:layout_height="wrap_content" androID:layout_wIDth="fill_parent" card_vIEw:cardCornerRadius="4dp"> <TextVIEw androID:ID="@+ID/tv" androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:text="Moscow"/> </androID.support.v7.Widget.CardVIEw></linearLayout>
然后,如果我在我的片段中
@OverrIDe public VIEw onCreateVIEw(LayoutInflater inflater, VIEwGroup container, Bundle savedInstanceState) { VIEw vIEw = inflater.inflate(R.layout.vIEw_vll_scrollbar, null); linearLayout ll = (linearLayout) vIEw.findVIEwByID(R.ID.vll); ll.addVIEw(new CardTest(this.getActivity())); return vIEw; }
我会看到这个结果(实际上,正如我所料):
但是如果我现在使用带有此代码的RecyclerVIEw
public class Calendaradapter extends RecyclerVIEw.Adapter<CalendarVIEwHolder> { private List<ItemCalendar> mList; public Calendaradapter(List<ItemCalendar> List) { this.mList = List; } @OverrIDe public int getItemCount() { return mList.size(); } @OverrIDe public voID onBindVIEwHolder(CalendarVIEwHolder calendarVIEwHolder, int i) { ItemCalendar ci = mList.get(i); calendarVIEwHolder.headerText.setText(ci.getCity()); } @OverrIDe public CalendarVIEwHolder onCreateVIEwHolder(VIEwGroup vIEwGroup, int i) { VIEw itemVIEw = new CardTest(vIEwGroup.getContext()); return new CalendarVIEwHolder(itemVIEw); } } public static class CalendarVIEwHolder extends RecyclerVIEw.VIEwHolder { protected TextVIEw headerText; protected TextVIEw bodyText; public CalendarVIEwHolder(VIEw v) { super(v); headerText = (TextVIEw) v.findVIEwByID(R.ID.card_extender_header_text); } }
我会得到这个结果
为什么我的卡片的水平尺寸不同?它可能是具有背景的东西吗?
解决方法:
基本上CardTest成为它不打算的布局.
在你的适配器中,你创建了一个CardTest实例,而不是为它提供布局参数,因此CardTest的布局结构将与card_main.xml不同:
<com.yourpackage.CardTest layout_wIDth="wrap_content" layout_height="wrap_content"><!--inflated hIErarchy is added into your custom vIEwgroup--><linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" xmlns:tools="http://schemas.androID.com/tools" xmlns:card_vIEw="http://schemas.androID.com/apk/res-auto" androID:layout_height="wrap_content" androID:layout_wIDth="fill_parent" androID:orIEntation="vertical" > <androID.support.v7.Widget.CardVIEw androID:layout_height="wrap_content" androID:layout_wIDth="fill_parent" card_vIEw:cardCornerRadius="4dp"> <TextVIEw androID:ID="@+ID/tv" androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:text="Moscow"/> </androID.support.v7.Widget.CardVIEw></linearLayout></com.yourpackage.CardTest>
那不是你的意思,不是吗?
只需在card_main.xml中删除外部linearLayout(您的视图已经是linearLayout本身):
<androID.support.v7.Widget.CardVIEw xmlns:androID= "http://schemas.androID.com/apk/res/androID" androID:layout_height="wrap_content" androID:layout_wIDth="fill_parent" card_vIEw:cardCornerRadius="4dp"> <TextVIEw androID:ID="@+ID/tv" androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:text="Moscow"/> </androID.support.v7.Widget.CardVIEw>
然后添加到您的适配器方法:
@OverrIDe public CalendarVIEwHolder onCreateVIEwHolder(VIEwGroup vIEwGroup, int i) { VIEw itemVIEw = new CardTest(vIEwGroup.getContext()); RecyclerVIEw.LayoutParams lp = new RecyclerVIEw.LayoutParams( VIEwGroup.LayoutParams.MATCH_PARENT, //wIDth VIEwGroup.LayoutParams.WRAP_CONTENT);//height itemVIEw.setLayoutParams(lp);//overrIDe default layout params return new CalendarVIEwHolder(itemVIEw); }
…并向莫斯科发送热烈的问候,占据整个屏幕宽度:)
编辑:您也可以考虑不动态创建CardTest视图层次结构,而是在XML中定义它并直接在onCreateVIEwHolder(..)中对其进行充气.
布局/ my_item.xml
<com.yourpackage.CardTest xmlns:androID= "http://schemas.androID.com/apk/res/androID" layout_wIDth="match_parent" layout_height="wrap_content"><androID.support.v7.Widget.CardVIEw androID:layout_height="wrap_content" androID:layout_wIDth="fill_parent" card_vIEw:cardCornerRadius="4dp"> <TextVIEw androID:ID="@+ID/tv" androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:text="Moscow"/> </androID.support.v7.Widget.CardVIEw></com.yourpackage.CardTest>
在代码中:
@OverrIDe public CalendarVIEwHolder onCreateVIEwHolder(VIEwGroup vIEwGroup, int i) { VIEw itemVIEw = LayoutInflater.from(vIEwGroup.getContext()).inflate(R.layout.my_item, vIEwGroup, false); return new CalendarVIEwHolder(itemVIEw); }
总结 以上是内存溢出为你收集整理的android – RecyclerView和普通LinearLayout内部布局的不同宽度全部内容,希望文章能够帮你解决android – RecyclerView和普通LinearLayout内部布局的不同宽度所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)