最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2018年02月05日 10:36:27   作者:徐風(fēng)來(lái)  
下面小編就為大家分享一篇Android中獲取控件寬高的4種方法集合,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

借鑒自開(kāi)發(fā)藝術(shù)

1.onWindowFocusChanged

這個(gè)方法會(huì)被調(diào)用多次,在View初始化完畢后會(huì)調(diào)用,當(dāng)Activity的窗口得到焦點(diǎn)和失去焦點(diǎn)都會(huì)被調(diào)用一次(Activity繼續(xù)執(zhí)行和暫停執(zhí)行時(shí))。

@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);
    }
  });
}

具體原理暫時(shí)還不懂,不過(guò)應(yīng)該是view封裝的異步回調(diào)初始化后,view的測(cè)繪多半也完成了,這是一個(gè)同步的過(guò)程。所以才可以接收到消息。

3.ViewTreeObserver

他有許多回調(diào)。比如當(dāng)View樹(shù)的狀態(tài)發(fā)生改變或者View樹(shù)內(nèi)部的View可見(jiàn)性發(fā)現(xiàn)改變時(shí),onGlobalLayout方法將被回調(diào)。

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);
  }
});

通過(guò)一種增加global listener又移除的方式,獲取觀察而來(lái)的消息。

4.view.measure

手動(dòng)測(cè)繪,分3種情況:

一、match_parent

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

二、具體的數(shù)值(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);

到這里為止了,這種方法不推薦,因?yàn)闇y(cè)出來(lái)發(fā)現(xiàn)有錯(cuò)誤。

以上這篇Android中獲取控件寬高的4種方法集合就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

乌苏市| 开江县| 灵丘县| 库尔勒市| 工布江达县| 罗甸县| 呼和浩特市| 凤山市| 普兰县| 商城县| 乐东| 甘南县| 南宁市| 枣强县| 会昌县| 绥棱县| 舟曲县| 上栗县| 黄石市| 汉阴县| 阳朔县| 武夷山市| 祁东县| 海伦市| 威远县| 北宁市| 佛山市| 尼木县| 太保市| 广灵县| 长丰县| 桐柏县| 堆龙德庆县| 三河市| 漾濞| 绥芬河市| 微山县| 永川市| 修文县| 深圳市| 白河县|