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

來源:互聯網
上載者:User

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"
高度自適應,不要把高度寫死就行了。
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.