在achat項目中,對話內容的長寬設置為自適應。可是假設文本內容太多,則寬度幾乎相同布滿,若自己說的和對方說的都非常多內容。則滿屏都是文字。則不easy分辨出是來自別人說的還是自己說的。那么須要對本身具有自適應的布局再來個寬度限制。
首先,在xml里面定義layout的layout_width/layout_height都要設置為wrap_content。然后在getView方法里面,一開始就讓這個布局wrap_content(為什么xml里面設置了wrap_content。這里還要再設置一遍呢?由於布局的重用,不多說了),WidgetController.setLayoutWidth(holder.lay_content, MarginLayoutParams.WRAP_CONTENT);
然后。在填充完布局后,再來一段。讓這個布局不能超過屏幕寬的50%。若超過則以這個為最大寬度:
int w=(int)(DensityUtil.getScreenWidth()*0.5); if (WidgetController.getWidth(holder.lay_content)>w){ WidgetController.setLayoutWidth(holder.lay_content,w); }
以下是setLayoutWidth方法的代碼,相當好用:
/** * 設置View的寬度(像素)。若設置爲自適應則應該傳入MarginLayoutParams.WRAP_CONTENT * @param view * @param width */ public static void setLayoutWidth(View view,int width) { /* MarginLayoutParams margin=new MarginLayoutParams(view.getLayoutParams()); margin.setMargins(margin.leftMargin,y, margin.rightMargin, y+margin.height); //RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(margin); //view.setLayoutParams(layoutParams); ViewGroup.MarginLayoutParams layoutParams =newLayParms(view, margin); //RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(margin); view.setLayoutParams(layoutParams); view.requestLayout();*/ if (view.getParent() instanceof FrameLayout){ FrameLayout.LayoutParams lp=(FrameLayout.LayoutParams) view.getLayoutParams(); lp.width=width; view.setLayoutParams(lp); //view.setX(x); view.requestLayout(); } else if (view.getParent() instanceof RelativeLayout){ RelativeLayout.LayoutParams lp=(RelativeLayout.LayoutParams)view.getLayoutParams(); lp.width=width; view.setLayoutParams(lp); //view.setX(x); view.requestLayout(); } else if (view.getParent() instanceof LinearLayout){ LinearLayout.LayoutParams lp=(LinearLayout.LayoutParams)view.getLayoutParams(); lp.width=width; view.setLayoutParams(lp); //view.setX(x); view.requestLayout(); } }

轉載請注明出處: http://blog.csdn.net/rocklee