国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android中獲取控件寬高的4種方法集合

2019-10-22 18:15:40
字體:
來源:轉載
供稿:網友

借鑒自開發藝術

1.onWindowFocusChanged

這個方法會被調用多次,在View初始化完畢后會調用,當Activity的窗口得到焦點和失去焦點都會被調用一次(Activity繼續執行和暫停執行時)。

@Overridepublic void onWindowFocusChanged(boolean hasFocus) {  super.onWindowFocusChanged(hasFocus);  if (hasFocus) {    int width = view.getMeasuredWidth();    int height = view.getMeasuredHeight();  }}

2.view.post

@Overrideprotected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  ViewGroup root = (ViewGroup) LayoutInflater.from(this).inflate(R.layout.activity_main, null, false);  setContentView(root);  final View view = root;  view.post(new Runnable() {    @Override    public void run() {      int width = view.getMeasuredWidth();      int height = view.getMeasuredHeight();      Log.i(TAG, width + " " + height);    }  });}

具體原理暫時還不懂,不過應該是view封裝的異步回調初始化后,view的測繪多半也完成了,這是一個同步的過程。所以才可以接收到消息。

3.ViewTreeObserver

他有許多回調。比如當View樹的狀態發生改變或者View樹內部的View可見性發現改變時,onGlobalLayout方法將被回調。

final View view = root;ViewTreeObserver observer = view.getViewTreeObserver();observer.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {  @Override  public void onGlobalLayout() {    view.getViewTreeObserver().removeGlobalOnLayoutListener(this);    int width = view.getMeasuredWidth();    int height = view.getMeasuredHeight();    Log.i(TAG, width + " " + height);  }});

通過一種增加global listener又移除的方式,獲取觀察而來的消息。

4.view.measure

手動測繪,分3種情況:

一、match_parent

這個情況是獲取不到的。構造這種情況的MeasureSpec需要知道父容器的剩余空間。

二、具體的數值(dp/px)

比如寬高都是100px,可以這樣做:

View view = root;int widthMeasureSpec = View.MeasureSpec.makeMeasureSpec(100, View.MeasureSpec.EXACTLY);int heightMeasureSpec = View.MeasureSpec.makeMeasureSpec(100, View.MeasureSpec.EXACTLY);view.measure(widthMeasureSpec, heightMeasureSpec);Log.i(TAG, widthMeasureSpec + " " + heightMeasureSpec);

到這里為止了,這種方法不推薦,因為測出來發現有錯誤。

以上這篇Android中獲取控件寬高的4種方法集合就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 手游| 临城县| 新竹县| 清镇市| 贵州省| 札达县| 临武县| 桃园县| 吉木萨尔县| 栾川县| 建始县| 甘南县| 建湖县| 奉新县| 永安市| 崇文区| 蓬安县| 莱州市| 应城市| 江西省| 乌拉特前旗| 宁波市| 库尔勒市| 崇左市| 阿鲁科尔沁旗| 深水埗区| 沛县| 光山县| 叶城县| 兰西县| 沁阳市| 铜川市| 朔州市| 延安市| 浏阳市| 洮南市| 金塔县| 黄浦区| 钦州市| 正安县| 南川市|