編輯:關於Android編程
當超出屏幕後,getMeasuredHeight()等於getHeight()加上屏幕之外沒有顯示的大小
我們知道在oncreate中View.getWidth和View.getHeight無法獲得一個view的高度和寬度,這是因為View組件 布局要在onResume回調後完成。
下面說三種方式
使用 getViewTreeObserver().addOnGlobalLayoutListener()來獲得寬度或者高度。
OnGlobalLayoutListener 是ViewTreeObserver的內部類,當一個視圖樹的布局發生改變時,可以被ViewTreeObserver監聽到,這是一個注冊監聽視圖樹的觀察者(observer),在視圖樹的全局事件改變時得到通知。ViewTreeObserver不能直接實例化,而是通過getViewTreeObserver()獲得。
private int mHeaderViewHeight;
private View mHeaderView;
.....
mHeaderView.getViewTreeObserver().addOnGlobalLayoutListener(
new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
mHeaderViewHeight = mHeaderView.getHeight();
mHeaderView.getViewTreeObserver()
.removeGlobalOnLayoutListener(this);
}
});
但是需要注意的是OnGlobalLayoutListener可能會被多次觸發,因此在得到了高度之後,要將OnGlobalLayoutListener注銷掉。
還可以在VIew的post方法中獲取
public class TestHeight extends Activity {
TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_activity_b);
tv = (TextView) findViewById(R.id.textView);
tv.post(new Runnable() {
@Override
public void run() {
int height= tv.getHeight();
}
});
}
}
int intw=View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED); int inth=View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED); textView.measure(intw, inth); int intwidth = textView.getMeasuredWidth(); int intheight = textView.getMeasuredHeight();
Android中Fragment與Activity的生命周期對比
Fragment必須是依存於Activity而存在的,因此Activity的生命周期會直接影響到Fragment的生命周期。官網這張圖很好的說明了倆者的關系:可以看到Fr
Android App在線程中創建handler的方法講解
相關概念1.Handler:可以看做是一個工具類,用來向消息隊列中插入消息的;2.Thread:所有與Handler相關的功能都是與Thread密不可分的,Handler
常用的自定義控件四(QuickBarView)
自定義View通訊錄字母快速索引在Android日常開發中,我們經常在聯系人界面看到一些字母導航欄,點擊字母的時候,會根據漢字的首拼音來查找是否存在相應的item,這種效
android 調用系統方法獲取應用程序信息 如緩存大小
1,android本來就有獲取應用緩存的方法,只是用起來有點麻煩。但我們的應用有時需要讓用戶知道緩存的大小,讓用戶及時清理緩存。直接上代碼,demo使用android s