android 用java代碼設定布局、視圖View的寬度/高度或自適應,androidjava
在achat項目中,對話內容的長寬設定為自適應,但是如果常值內容太多,則寬度差不多布滿,若自己說的和對方說的都很多內容,則滿屏都是文字,則不容易分辨出是來自別人說的還是自己說的。那麼需要對本身具有自適應的布局再來個寬度限制。
首先,在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
android 代碼中設定控制項的垂直置中與兩個控制項之間的距離
LinearLayout phone_LayoutAccount=new LinearLayout(mContext);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,LinearLayout.LayoutParams.MATCH_PARENT);
phone_LayoutAccount.setGravity(Gravity.CENTER_VERTICAL);
//params.
params.setMargins(10, 10, 10, 10);
phone_LayoutAccount.setLayoutParams(params);
這是我自己寫的一個線性布局的,你可以仿照一下就可以了。不懂的可以看api文檔
LinearLayout.LayoutParams
android布局
我想告訴你的是,dip是根據螢幕的解析度自動計算成對應的像素,而不同的機型換算的比例都是固定的。
再來看你用的三個機型,他們的長寬比分別是 5/3 3/2 4/3,你可以看得出,在相同的寬度下,你的實機高度是最高的,所以放得下你的布局。
比如說一個螢幕的高是400dip,當你的螢幕用的高度超過了400dip,那一樣會被擠出的。
解決
方法一:
把每個button的高度調低一點,這是最方便的。比如說設個20dip。要知道,螢幕的dip也是確定的,超過了就會出問題。
方法二:
在RelativeLayout 外面套一個ScrollView,這樣就不怕擠出或者變形了。
方法三:
你用一個Linearlayout把四個button都裝進去,每個button上加上android:layout_weight="1"
高度自適應,不要把高度寫死就行了。