2015-09-10 68 views
4

我將一個LinearLayout定義爲activity_main.xml中的根元素。我試圖在此垂直LinearLayout中添加Button,根據Google的API,我試圖在ViewGroup中添加它之前調用setWidth(20)按鈕,但Button佔用了寬度'match_parent'而不是20dp。如果ViewGroup的寬度是xml中的'match_parent'/'fill_parent',Button的set set()不起作用?

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="fill_parent" 
    android:layout_margin="10dp" 
    android:orientation="vertical" 
    android:id="@+id/first_layout"> 
    </LinearLayout> 

//Inside onCreate() of activity..  
    LinearLayout firstLayout = (LinearLayout) findViewById(R.id.first_layout); 
      Button button = new Button(this); 
      button.setText(R.string.click_on_me); 
      button.setWidth(20); 
      firstLayout.addView(button); 

Case 1

CASE 2:設置layout_width的LinearLayout的爲 'WRAP_CONTENT',並調用setWidth(20),它現在被認爲是給定明確的寬度值即20dp。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="fill_parent" 
    android:layout_margin="10dp" 
    android:orientation="vertical" 
    android:id="@+id/first_layout"> 
</LinearLayout> 

//Inside onCreate() method 
LinearLayout firstLayout = (LinearLayout) findViewById(R.id.first_layout); 
     Button button = new Button(this); 
     button.setText(R.string.click_on_me); 
     button.setWidth(20);//In this case, its working 
     firstLayout.addView(button); 

enter image description here

情況3:最後,除去我的自定義調用setWidth(20),按鈕獲取的寬度爲 'WRAP_CONTENT'。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="fill_parent" 
    android:layout_margin="10dp" 
    android:orientation="vertical" 
    android:id="@+id/first_layout"> 

</LinearLayout> 

//Inside onCreate() method. 
LinearLayout firstLayout = (LinearLayout) findViewById(R.id.first_layout); 
     Button button = new Button(this); 
     button.setText(R.string.click_on_me);   
     firstLayout.addView(button); 

enter image description here

QUES:所以很清楚的情況下,2,在使用的LayoutParams是沒有必要的,如果我想明確地使用setWidth()method.Then在案例4:即LinearLayout中的寬度設定作爲'match_parent'和button.setWidth(20)也被調用。 但是,爲什麼Button仍然沒有明確給出寬度值,再次輸出是完全相同的情況1.

在此先感謝。

回答

1

您需要爲您的按鈕視圖定義合適的LayoutParams。然後將其添加到您的firstLayout

LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
params.height = XX; 
params.width = XX; 
button.setLayoutParams(params); 
+0

但是setWidth()的API表示「使TextView正好有很多像素寬度,你可以通過在LayoutParams中指定這個數字來做同樣的事情。」 我認爲這意味着,它沒有必要我必須使用LayoutParams方法,通過調用setWidth()我試圖定義相同。 – itsMohitGoel

2

你必須明白,爲什麼使用Layoutparams是必要的,當你動態創建按鈕或任何組件。

假設你使用LayoutParams來給Button指定寬度。然後,當我們設置Button的佈局參數時,我們正在告訴父按鈕的佈局(即LinearLayout),以便爲視圖設置指定的高度和寬度。因此,它在渲染時工作正常。

如果您告訴它情況1不影響20的正數,那是因爲默認情況下Button的最小寬度爲64dip。在設置寬度之前將其設置爲0。

btn.setMinimumWidth(0); 

此鏈接here可以給你一些幫助。