當前位置:首頁 » 安卓系統 » androidview寬度

androidview寬度

發布時間: 2023-03-07 21:30:29

『壹』 Android View何時能拿到寬高的值

一個View或ViewGroup中什麼什麼時候能拿到寬高的值?

width 表示 View 在屏幕上可顯示的區域大小;
measuredWidth 表示 View 的實際大小,包括超出屏幕范圍外的尺寸;

甚至有這樣的公式總結到:
getMeasuredWidth() = visible width + invisible width

getMeasuredWidth() 在執行setMeasuredDimension(一般在onMeasure方法中執行)後才有值;
getWidth()在onLayout方法執行後才有值。



Constructor : 構造方法,View初始化的時候調用,在這里是無法獲取其子控制項的引用的.更加無法獲取寬高了.

onFinishInflate : 當布局初始化完畢後回調,在這里可以獲取所有直接子View的引用,但是無法獲取寬高.

onMeasure : 當測量控制項寬高時回調,當調用了requestLayout()也會回調onMeasure.在這里一定可以通過getMeasuredHeight()和getMeasuredWidth()來獲取控制項的高和寬,但不一定可以通過getHeight()和getWidth()來獲取控制項寬高,因為getHeight()和getWidth()必須要等onLayout方法回調之後才能確定.

onSizeChanged : 當控制項的寬高發生變化時回調,和onMeasure一樣,一定可以通過getMeasuredHeight()和getMeasuredWidth()來獲取控制項的高和寬,因為它是在onMeasure方法執行之後和onLayout方法之前回調的.

onLayout : 當確定控制項的位置時回調,當調用了requestLayout()也會回調onLayout.在這里一定可以通過getHeight()和getWidth()獲取控制項的寬高,同時由於onMeasure方法比onLayout方法先執行,所以在這里也可以通過getMeasuredHeight()和getMeasuredWidth()來獲取控制項的高和寬.

addOnGlobalLayoutListener : 當View的位置確定完後會回調改監聽方法,它是緊接著onLayout方法執行而執行的,只要onLayout方法調用了,那麼addOnGlobalLayoutListener的監聽器就會監聽到.在這里getMeasuredHeight()和getMeasuredWidth()和getHeight()和getWidth()都可以獲取到寬高.

onWindowFocusChanged : 當View的焦點發送改變時回調,在這里getMeasuredHeight()和getMeasuredWidth()和getHeight()和getWidth()都可以獲取到寬高.Activity也可以通過重寫該方法來判斷當前的焦點是否發送改變了;需要注意的是這里View獲取焦點和失去焦點都會回調.



(部分內容參考於網路,如有不妥,請聯系刪除~)

『貳』 如何正確的獲得一個view的寬和高

我們都知道在onCreate()裡面獲取控制項的高度是0,這是為什麼呢?我們來看一下示例:
首先我們自己寫一個控制項,這個控制項非常簡單:



public class MyImageView extends ImageView {
public MyImageView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyImageView(Context context) {
super(context);
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
System.out.println("onMeasure 我被調用了"+System.currentTimeMillis());
}

@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
System.out.println("onDraw 我被調用了"+System.currentTimeMillis());
}
}

布局文件:

<com.test.MyImageView
android:id="@+id/imageview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/test" />

測試的Activity的onCreate():


@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
System.out.println("執行完畢.."+System.currentTimeMillis());
}

現在我們現在來看一下結果:

說明等onCreate方法執行完了,我們定義的控制項才會被度量(measure),所以我們在onCreate方法裡面通過view.getHeight()獲取控制項的高度或者寬度肯定是0,因為它自己還沒有被度量,也就是說他自己都不知道自己有多高,而你這時候去獲取它的尺寸,肯定是不行的.
有如下兩種方法可以解決這個問題:
----------------------------------

方法一:使用view的measure方法。
------------------------------

優點:可以立即獲得寬和高

缺點:人為的多了一次測量過程

這種方法適用於需要在onCreate完成之前就獲得一個view的寬和高的情況。
比如獲得一個LinearLayout寬和高


//寬
public int getViewWidth(LinearLayout view){
view.measure(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
return view.getMeasuredWidth();
}
//高
public int getViewHeight(LinearLayout view){
view.measure(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
return view.getMeasuredHeight();
}

這種方法的原理是直接調用一個view或者viewgroup的measure方法去測量,測量之後該view的getMeasuredHeight()就會返回剛才測量所得的高,getMeasuredWidth返回測量所得寬。本來在布局載入的過程中,view的measure方法一定會被系統調用,但這發生在我們所不知道的某個時間點,為了在這之前提前得到測量結果,我們主動調用measure方法,但是這樣做的好處是可以立即獲得寬和高,壞處是多了一次測量過程。
至於為什麼參數是LayoutParams.WRAP_CONTENT,那是因為我假設這個view的layout_width和layout_height為wrap_content,因為如果為一個確切的值,還有必要測量嗎?
-------------------------------------------------------------------
方法二:布局監聽類ViewTreeObserver的OnGlobalLayoutListener
-------------------------------------------------------------

當一個view的布局載入完成或者布局發生改變時OnGlobalLayoutListener可以監聽到,利用這點我們可以在布局載入完成的瞬間獲得一個view的寬高。

int mHeaderViewHeight;
mHeaderView.getViewTreeObserver().addOnGlobalLayoutListener(
new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {

mHeaderViewHeight = mHeaderView.getHeight();
getViewTreeObserver()
.removeGlobalOnLayoutListener(this);
}
});

這種方法無法像第一種方法那樣通過一個函數返回值,因為他是基於listener的,OnGlobalLayoutListener的onGlobalLayout被回調之前是沒有值的。由於布局狀態可能會發生多次改變,因此OnGlobalLayoutListener的onGlobalLayout可能被回調多次,所以我們在 第一次獲得值之後就將listener注銷掉。

『叄』 android中的動畫可以改變一個view的高和寬嗎

android中有三種動畫類型,分別是TweenAnimation, FrameAnimation和PropertyAnimation。


要在視覺上改變view的高和寬,只是視覺

一:可以使用TweenAnimation類型的縮放動畫ScaleAnimation,但是通過實踐可以發現雖然視覺上view控制項是增大或者縮小了,但是觸摸范圍還是原來的大小,真正意義上的寬高也就是getMeasureWidth和getMeasureHeight的值並不會改變,所以不符合要求


二:使用PropertyAnimation,屬性動畫就是通過改變控制項的屬性來達到動畫的效果,所以根據需求屬性動畫是合適的

示例代碼如下

java">Viewview;
ObjectAnimatoranimator=ObjectAnimator.ofFloat(view,"scaleY",1f,2f);
animator.setDuration(1000);
animator.start();

上面代碼的效果就是讓view的高度拉伸一倍

只要是控制項的setXXX方法可以改變view就可以使用,比如setTranslationX,setScrollY等等方法

『肆』 android 自定義view 怎麼設置其寬度和高度

自定義view的父類肯定是View或者View的子類。所以也是支持layout_width,layout_height屬性的,如果想另外控制的話,可以重寫View的onDraw方法。

『伍』 android 自定義view 怎麼設置其寬度和高度

自定義View 可以設置iji的布局,
1.在布局中設置寬高
2.在ondraw方法中繪制的view設置寬高
3.LayoutInflater設置寬高

『陸』 android 自定義view 怎麼設置其寬度和高度

你這個View是怎麼使用的?是在activity的xml文件中把它當一個控制項放進去的嗎?如果是這樣的話,你直接xml裡面設置寬高就行。如果你是new 一個View出來的,然後代碼控制它的具體位置的話,也是能設置這個View寬高的。

『柒』 Android 自定義View 寬高總是充滿父容器,怎麼讓它自適應保持對應寬高

自定義View,想要自定義給定寬和高,你要寫自定義屬性,然後在xml文件中指定寬高才會有效,同時當給定的寬和高的值是wrap_content 或 fill_parent 這類的,這時需要在自定義View中重寫onMeasure方法,進行控制項的寬高測量。

『捌』 Android中如何在代碼中設置View的寬和高

LayoutParams params = mWebViewHeader.getLayoutParams(); params.height = height; params.width = LayoutParams.FILL_PARENT; mWebViewHeader.setLayoutParams(params);

『玖』 android textview怎麼准確的獲取字元寬度

android取得textview中每個字元的寬度方法如下:
//方法入口
public float getCharacterWidth(TextView tv){
if(null == tv) return 0f;
return getCharacterWidth(tv.getText().toString(),tv.getTextSize()) * tv.getScaleX();
}

//獲取每個字元的寬度主方法:
public float getCharacterWidth(String text, float size){
if(null == text || "".equals(text))
return 0;
float width = 0;
Paint paint = new Paint();
paint.setTextSize(size);
float text_width = paint.measureText(text);//得到總體長度
width = text_width/text.length();//每一個字元的長度
return width;
}

熱點內容
大華錄像機哪裡有安卓設備 發布:2025-05-15 14:25:06 瀏覽:806
錄制腳本方案 發布:2025-05-15 14:25:04 瀏覽:164
奇石腳本業 發布:2025-05-15 14:23:44 瀏覽:678
android中的socket 發布:2025-05-15 14:22:15 瀏覽:407
apph5源碼 發布:2025-05-15 14:19:51 瀏覽:665
2d游戲按鍵精靈腳本教程 發布:2025-05-15 14:10:15 瀏覽:278
伺服器上的郵件如何銷毀 發布:2025-05-15 14:02:49 瀏覽:137
飢荒安卓版如何解除手柄模式 發布:2025-05-15 14:02:05 瀏覽:112
演算法強化班 發布:2025-05-15 14:02:04 瀏覽:345
c語言編譯後圖片 發布:2025-05-15 13:51:57 瀏覽:792