當前位置:首頁 » 安卓系統 » android控制項大小

android控制項大小

發布時間: 2022-07-11 12:15:19

Ⅰ android 代碼里怎麼設置控制項的寬度

你可以通過findViewById() 先獲得這個控制項剩下的就是你去調用這個控制項的方法在你的代碼裡面設置控制項的寬高了。

Ⅱ android 在onCreate中獲得控制項的大小

這個方法並不是適合所有場景,這個方法獲取的寬度是minWidth參數設置的大小和background指定背景寬度,這兩個寬度的最大值,高也是如此,也就是說如果View的xml中沒有兩個參數中的其中一項,那麼這個方法測量的寬高也是為0的,這個方法測量的並不是獲取xml中設置的android:layout_height android:layout_width的值,為什麼這么說了,看源碼
imageView.measure(w, h); -->調用View的measure方法-->onMeasure()方法,onMeasure源碼:

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

setMeasuredDimension(getDefaultSize(getSuggestedMinimumWidth(),widthMeasureSpec),

getDefaultSize(getSuggestedMinimumHeight(), heightMeasureSpec));

}
onMeasure->setMeasuredDimension()->getDefaultSize()>getSuggestedMinimumHeight()
這個是源碼onMeasure中方法調用過程,逆向分析方法源碼:
getSuggestedMinimumHeight():
protected int getSuggestedMinimumHeight() {

return (mBackground == null) ? mMinHeight : max(mMinHeight,mBackground.getMinimumHeight());

}
如果背景為空,那麼就取mMinHeight的值,如果背景不為空就取max(mMinHeight,mBackground.getMinimumHeight())背景高度和mMinHeight最大值
接下來獲取建議值完畢後查看getDefaultSize的源碼:

//第一個參數是getSuggestedMinimumHeight方法獲取的建議值 第二個參數是系統計算得出的寬高規格是MeasureSpec值,也就是measure(w,h)中的w或者h,
public static int getDefaultSize(int size, int measureSpec) {

int result = size;
//int w = View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED);

//規格模式不就是上面的:View.MeasureSpec.UNSPECIFIED
int specMode = MeasureSpec.getMode(measureSpec);
//規格模式不就是上面的 0
int specSize = MeasureSpec.getSize(measureSpec);

switch (specMode) {//這里是什麼了?View.MeasureSpec.UNSPECIFIED理解吧

case MeasureSpec.UNSPECIFIED://
//result就是getDefaultSize要返回的值,根據switch判讀getDefaultSize返回的是什麼了
//不就是方法的第一個形參嗎,這個形參不就是寬高建議值嗎
//也就是max(mMinHeight,mBackground.getMinimumHeight());
result = size;
break;
case MeasureSpec.AT_MOST:
case MeasureSpec.EXACTLY:

result = specSize;

break;

}
return result;
}

好了,現在就是setMeasuredDimension方法了,源碼:
protected final void setMeasuredDimension(int measuredWidth, int measuredHeight) {

boolean optical = isLayoutModeOptical(this);

if (optical != isLayoutModeOptical(mParent)) {

Insets insets = getOpticalInsets();

int opticalWidth = insets.left + insets.right;

int opticalHeight = insets.top + insets.bottom;

measuredWidth += optical ? opticalWidth : -opticalWidth;

measuredHeight += optical ? opticalHeight : -opticalHeight;

}

mMeasuredWidth = measuredWidth;//這個是這個方法要注意的值

mMeasuredHeight = measuredHeight;//同上

mPrivateFlags |= PFLAG_MEASURED_DIMENSION_SET;

}
這個代碼好長啊,好多東西,要關注的就是注釋的代碼,上面要注意的兩行代碼有什麼用了
你再看一個方法的源碼你就是知道了,getMeasureWidth()與getMeasureHeight():
public final int getMeasuredWidth() {

return mMeasuredWidth & MEASURED_SIZE_MASK;

}
public final int getMeasuredHeight() {

return mMeasuredHeight & MEASURED_SIZE_MASK;

}
這兩個方法不就是返回調用measure測量的寬高嗎?不就是上面兩行注意的代碼的值嗎
現在回答你的問題:
這是代碼,我想問makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED)中的一個參數為什麼是0,什麼意思?

第一個參數本應該是系統測量該View後得到的規格值(MeasureSpec),本來這個measure是由系統測量完寬高後自動調用,我們這里只是做了系統即將要做的事情而已,那麼這個參數為什麼是0了,既然我們要通過這個方法測量View的寬高,不就是怕系統還沒有自動調用這個方法前調用getMeasureWidth/Height方法而沒法獲得導致取值為0 ,也就是我們默認調用這個方法就是系統沒有對該View繪制,就直接調用了measure方法,所以也就是寬高為0咯,其實這
makeMeasureSpec的第一個參數設置什麼都無所謂啦,因為最後取得值也不是第一個參數設置的值,我覺得我的表達好繞啊,不過要是你對measure的繪制機制的源碼很熟悉的話,應該是沒問題的,這里我推薦你去看(谷歌的小弟)csdn的博客裡面有完整的源碼分析,你要以前看的不是很懂,去看看他寫的博客應該會有點啟發

Ⅲ android開發,控制項大小的單位應該用什麼,才能在任何解析度的屏幕上,顯示的比例都相同。

android開發中,在任何解析度都完全一樣的話,那麼你需要用 dp dip sp 等單位來做控制項大小需要注意的一點是如果分辨相同,但是屏幕大小不同,你看起來可能也會不一樣的


關於控制項的單位介紹:

  1. dip: device independent pixels(設備獨立像素). 不同設備有不同的顯示效果,這個和設備硬體有關,一般我們為了支持WVGA、HVGA和QVGA 推薦使用這 這個,不依賴像素這里要特別注意dip與屏幕密度有關,而屏幕密度又與具體的硬體有關,硬體設置不正確,有可能導致dip不能正常顯示。在屏幕密度為160的顯示屏上,1dip=1px,有時候可能你的屏幕解析度很大如480*800,但是屏幕密度沒有正確設置比如說還是160,那麼這個時候凡是使用dip的都會顯示異常,基本都是顯示過小。

    dip的換算:dip(value)=(int) (px(value)/1.5 + 0.5)

  2. dp: 很簡單,和dip是一樣的。

  3. px: pixels(像素),不同的設備不同的顯示屏顯示效果是相同的,這是絕對像素,是多少就永遠是多少不會改變。

  4. sp: scaled pixels(放大像素). 主要用於字體顯示best for textsize。

備注: 根據google的推薦,view統一使用dip,字體統一使用sp

Ⅳ android 動態生成控制項,怎麼設置控制項的大小

一、方法
使用getLayoutParams() 和setLayoutParams()方法
二、示例代碼
LinearLayout.LayoutParams linearParams = (LinearLayout.LayoutParams) aaa.getLayoutParams();
// 取控制項aaa當前的布局參數
linearParams.height = 365; // 當控制項的高強制設成365象素
aaa.setLayoutParams(linearParams); // 使設置好的布局參數應用到控制項aaa
三、原理
a)getLayoutParams()和setLayoutParams()都是控制項基類view的public方法,在外部也可以直接調用。
b)由於LayoutParams一般是在加入容器中設置的,所以容易混淆所指定的布局屬性究竟是保存在容器中,還是控制項本身的屬性,答案是控制項本身。但是在設置時還是要注意布局屬性與容器種類密切相關。

Ⅳ android 如何動態設置控制項的寬度和高度

android中的控制項如果在xml布局文件中把控制項的layout_width和layout_height寫成固定值了,好像就不能再在程序中更改該控制項的高度和寬度了,不知哪位大俠有何良策可以指教一二,如 xml文件內容如下: <LinearLayout android:id="@id/dialog_bottom_neutral" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1.0" android:gravity="center"<Buttonandroid:id="@id/dialog_bottom_neutral_button" android:layout_width="80.0dip" android:layout_height="28.0dip" android:background="@drawable/dlg_button" android:gravity="center" android:singleLine="true" android:text="mid" android:textColor="@drawable/dlg_button_text_color" android:textSize="14.0sp" / 小弟在程序中使用button.width和button.height設置沒用,用LayoutParmas設置也沒用

Ⅵ android的popupwindow控制項的大小的問題

popUpWindow.setBackgroundDrawable(getResources().getDrawable(R.drawable.page2));
設置的是popupwindow(window容器)的背景。
popUpWindow
=
new
PopupWindow(show_popvieView,LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
//是將show_popvieView放入容器中,以自適應作為大小,且容器也採用自適應。
綜上,如果你設置大小,導致show_popvieView沾滿整個屏幕,那麼window容器最為底層,設置的背景坑定是看不見的。
建議:背景設置採用設置show_popvieView的背景。如果有多層,可以在內容裡面鑲嵌,最好別直接設置外層popupwindow容器

Ⅶ 問一下關於android 控制項大小的問題

這三個的android:layout_weight="1" 都設置成1

希望可以幫你。

layout_weight 用於給一個線性布局中的諸多視圖的重要度賦值。
所有的視圖都有一個layout_weight值,默認為零,意思是需要顯示
多大的視圖就占據多大的屏幕空 間。若賦一個高於零的值,則將父視
圖中的可用空間分割,分割大小具體取決於每一個視圖的layout_weight
值以及該值在當前屏幕布局的整體 layout_weight值和在其它視圖屏幕布
局的layout_weight值中所佔的比率而定。
舉個例子:比如說我們在 水平方向上有一個文本標簽和兩個文本編輯元素。
該文本標簽並無指定layout_weight值,所以它將占據需要提供的最少空間。
如果兩個文本編輯元素每一個的layout_weight值都設置為1,則兩者平分
在父視圖布局剩餘的寬度(因為我們聲明這兩者的重要度相等)。如果兩個
文本編輯元素其中第一個的layout_weight值設置為1,而第二個的設置為2,
則剩餘空間的三分之二分給第一個,三分之一分給第二個(數值越小,重要度越高)。

Ⅷ android如何設置圖片自適應控制項大小

<ImageView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/ic_launcher"/>

寬度和高度使用fill_parent (填充父窗體)

fill_parent 可以使控制項充滿父控制項,也就是你說的自動使用圖片控制項外的控制項大小。

熱點內容
日本免費雲伺服器色 發布:2025-04-05 04:58:52 瀏覽:864
linuxcpp 發布:2025-04-05 04:53:38 瀏覽:747
安卓字體哪個最好 發布:2025-04-05 04:46:37 瀏覽:649
什麼是hdb3碼編解碼 發布:2025-04-05 04:40:20 瀏覽:504
編譯原理運算符 發布:2025-04-05 04:37:50 瀏覽:520
如何用安卓手機玩ipad的賬號 發布:2025-04-05 04:17:42 瀏覽:935
vivo手機怎麼在桌面建文件夾 發布:2025-04-05 04:15:56 瀏覽:961
在線ftp網頁版軟體 發布:2025-04-05 04:15:02 瀏覽:624
android手機gps 發布:2025-04-05 04:14:59 瀏覽:446
頁數演算法 發布:2025-04-05 03:19:01 瀏覽:318