當前位置:首頁 » 安卓系統 » android獲取控制項的寬高

android獲取控制項的寬高

發布時間: 2022-06-10 10:10:22

1. 在android中listview中怎麼獲取條目中某個控制項的寬度

先getchildAt找到這個條目,然後findviewbyid找到控制項,最後getWidth就行了。

2. 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設置也沒用

3. 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的博客裡面有完整的源碼分析,你要以前看的不是很懂,去看看他寫的博客應該會有點啟發

4. android中,如何點擊一個按鈕,控制一個已經存在的控制項的高度寬度

點擊事件你會把,這個就不說了,設置寬高
就是
button.setLayoutParams(new
LayoutParams(
LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT));
LayoutParams具體導入什麼包就得看你外面用的是什麼。
還有你說的循環添加監聽那個,你首先幾個按鈕的id設置為
這種。。button1,button2...
for(int
i
=
0;
i
<
size;
i++){
Button
button
=
findViewById(R.id.button1
+
i);
button.setOnClickListener();
}
你這個
for(int
i=1;i<8;i++){
Button
heaterB=(Button)findViewById(R.id.heaterB+i);
地方錯了
應該是
for(int
i=0;i<8;i++){
Button
heaterB=(Button)findViewById(R.id.heaterB1+i);

5. android開發中遇到一個問題,進入界面時候,listview是隱藏的,但是我要動態這是item中控制項的寬度

這樣看你listview顯示item的布局,如果整個布局下只有一個Listview,TextView和EditText是一上一下的話,直接match_parent即可(最好截個圖或把布局代碼發出來)。獲取listview的item的高度和寬度我提供一個代碼:

java">publicstaticvoidgetListItemWH(ListViewlistView){
try{
//獲取ListView對應的Adapter
ListAdapterlistAdapter=listView.getAdapter();
if(listAdapter==null){
return;
}
intlen=listAdapter.getCount();//item總數
for(inti=0;i<len;i++){
ViewlistItem=listAdapter.getView(i,null,listView);
if(null!=listItem){
listItem.measure(0,0);//計運算元項View的寬高
inth=listItem.getMeasuredHeight();//每一個item的高度
intw=listItem.getMeasuredHeight();//每一個item的寬度
Log.d("test","h="+h";w="+w);//列印看看
}
}
listView.getDividerHeight();//獲取子項間分隔符佔用的高度
}catch(Exceptione){
}
}

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

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

7. android下,如何實現動畫效果那樣修改控制項的寬高

創建一個線程修改控制項大小相關數據,handler設置控制項LayoutParmas

8. 怎麼獲取android.support.design.widget.FloatingActionButton控制項的大小

Android動態改變View控制項大小的方法:
1、聲明控制項參數獲取對象 LayoutParams lp;
2、獲取控制項參數: lp = 控制項id.getLayoutParams();
3、設置控制項參數:如高度。 lp.height -= 10;
4:、使設置生效:控制項id.setLayoutParams(lp);
例如如要把Imageview下移200px: ImageView.setPadding( ImageView.getPaddingLeft(), ImageView.getPaddingTop()+200, ImageView.getPaddingRight(), ImageView.getPaddingBottom());

熱點內容
內置存儲卡可以拆嗎 發布:2025-05-18 04:16:35 瀏覽:335
編譯原理課時設置 發布:2025-05-18 04:13:28 瀏覽:378
linux中進入ip地址伺服器 發布:2025-05-18 04:11:21 瀏覽:612
java用什麼軟體寫 發布:2025-05-18 03:56:19 瀏覽:32
linux配置vim編譯c 發布:2025-05-18 03:55:07 瀏覽:107
砸百鬼腳本 發布:2025-05-18 03:53:34 瀏覽:944
安卓手機如何拍視頻和蘋果一樣 發布:2025-05-18 03:40:47 瀏覽:740
為什麼安卓手機連不上蘋果7熱點 發布:2025-05-18 03:40:13 瀏覽:803
網卡訪問 發布:2025-05-18 03:35:04 瀏覽:511
接收和發送伺服器地址 發布:2025-05-18 03:33:48 瀏覽:371