2016-09-09 67 views
2

我正在使用Android版本4.4.2使用物理設備的原生Android項目。我在垂直線性佈局中有一個按鈕,我想以編程方式將頂部和底部邊距設置爲0。以編程方式設置邊距不起作用

對父視圖

LinearLayout.LayoutParams detailParams = new LinearLayout.LayoutParams(
      LinearLayout.LayoutParams.MATCH_PARENT, 
      LinearLayout.LayoutParams.WRAP_CONTENT 
); 
LinearLayout detailContainer = new LinearLayout(this); 
detailContainer.setOrientation(LinearLayout.VERTICAL); 
detailContainer.setLayoutParams(detailParams); 

按鈕

LinearLayout.LayoutParams messageParams = new LinearLayout.LayoutParams(
       LinearLayout.LayoutParams.MATCH_PARENT, 
       LinearLayout.LayoutParams.WRAP_CONTENT 
     ); 
     messageParams.setMargins(10, 0, 10, 0); 

    // Displays the message 
    Button buttonWithMessage= new Button(this); 
    buttonWithMessage.setText(post.getMessage()); 
    ... 
    buttonWithMessage.setLayoutParams(messageParams); 

添加按鈕父視圖

detailContainer.addView(buttonWithMessage); 

但無論我把messageParams.setMargins(10, 0, 10, 0);的什麼值的信息利潤率不會改變。我希望邊距能夠跨越整個寬度,除了一點點左右,沒有一點在頂部和底部,所以它看起來像觸摸一樣。我甚至嘗試爲上面的每個父視圖設置相同的參數,因爲父視圖都是線性佈局,但仍然沒有。

+0

我不看你設置新PARAMS到你改變它們後的視圖 –

+0

哎呀,意外地沒有發佈,有更多的設置,我跳過了 – CookieMonster

回答

0

您應該使用的LayoutParams來設置按鈕邊距:

LayoutParams params = new LayoutParams(
    LayoutParams.WRAP_CONTENT,  
    LayoutParams.WRAP_CONTENT 
); 
params.setMargins(left, top, right, bottom); 
yourbutton.setLayoutParams(params); 

取決於你使用你應該使用RelativeLayout.LayoutParams或LinearLayout.LayoutParams什麼佈局。

+0

我不認爲我明白,我的例子是使用'L inearLayout.LayoutParams',你是說我應該使它更通用? – CookieMonster

0

使用按鍵錯誤的LayoutParams嘗試這樣的事情

public class MainActivity extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    //setContentView(R.layout.activity_main); 


    LinearLayout.LayoutParams detailParams = new LinearLayout.LayoutParams(
      LinearLayout.LayoutParams.MATCH_PARENT, 
      LinearLayout.LayoutParams.WRAP_CONTENT 
    ); 
    LinearLayout detailContainer = new LinearLayout(this); 
    detailContainer.setOrientation(LinearLayout.VERTICAL); 
    detailContainer.setLayoutParams(detailParams); 

    detailContainer.setBackgroundColor(Color.BLACK); 
    LinearLayout.LayoutParams messageParams = new LinearLayout.LayoutParams(
      LinearLayout.LayoutParams.WRAP_CONTENT, 
      LinearLayout.LayoutParams.WRAP_CONTENT 
    ); 
    messageParams.setMargins(400, 400, 400, 400); 

    // Displays the message 
    Button buttonWithMessage = new Button(this); 
    buttonWithMessage.setText("Hai"); 
    buttonWithMessage.setTransformationMethod(null); 
    // buttonWithMessage.setTextAlignment(View.TEXT_ALIGNMENT_TEXT_START); 
    buttonWithMessage.setTextColor(Color.BLACK); 
    buttonWithMessage.setBackgroundColor(Color.RED); 

    buttonWithMessage.setLayoutParams(messageParams); 
    detailContainer.addView(buttonWithMessage); 
    setContentView(detailContainer); 
} 

}

+0

@CookieMonster:讓我知道你的cmt。 – DKV

+0

不會'setContentView(detailContainer);'將它添加到當前活動中?我也將佈局傳遞給其他方法 – CookieMonster

+0

setContentView(detailContainer);設置活動佈局 – DKV

0

You're,這是工作

RelativeLayout relativeLayout = (RelativeLayout) findViewById(R.id.rel_test); 
    Button buttonWithMessage= new Button(this); 
    buttonWithMessage.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, 
      RelativeLayout.LayoutParams.WRAP_CONTENT)); 
    RelativeLayout.LayoutParams test = (RelativeLayout.LayoutParams) buttonWithMessage.getLayoutParams(); 
    test.setMargins(10, 0, 0, 0); 
    buttonWithMessage.setLayoutParams(test); 
    buttonWithMessage.setText("TEST"); 
    relativeLayout.addView(buttonWithMessage); 
+0

這是我將它添加到'LinearLayout detailContainer = new LinearLayout(this)'的視圖,',到目前爲止,我沒有在應用程序中使用任何相關佈局。 – CookieMonster

+0

無關緊要的是爲按鈕創建realativelayout參數,您可以將按鈕添加到任何佈局 –

相關問題