android 用java代碼設置布局、視圖View的寬度/高度或自適應


              在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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM