91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2020-08-29 14:50:02 來源:腳本之家 閱讀:171 作者:徐風來 欄目:移動開發

借鑒自開發藝術

1.onWindowFocusChanged

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

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

2.view.post

@Override
protected 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種方法集合就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

鲁山县| 沙田区| 营山县| 五常市| 南投市| 子洲县| 博客| 西乡县| 称多县| 改则县| 湖北省| 桐庐县| 东乡| 灵川县| 米泉市| 东莞市| 西盟| 绥滨县| 开阳县| 大洼县| 泸定县| 延吉市| 宣武区| 栖霞市| 榕江县| 平谷区| 油尖旺区| 虞城县| 牟定县| 望谟县| 志丹县| 西林县| 通城县| 安溪县| 大庆市| 双辽市| 吴忠市| 云南省| 龙江县| 武威市| 延津县|