java layout_java - 以编程方式在LinearLayout中设置边距
java - 以編程方式在LinearLayout中設置邊距
我正在嘗試使用Java(而不是XML)創建一個LinearLayout,其中的按鈕可以填充屏幕并具有邊距。 這是沒有邊距的代碼:
LinearLayout buttonsView = new LinearLayout(this);
buttonsView.setOrientation(LinearLayout.VERTICAL);
for (int r = 0; r < 6; ++r) {
Button btn = new Button(this);
btn.setText("A");
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT); // Verbose!
lp.weight = 1.0f; // This is critical. Doesn't work without it.
buttonsView.addView(btn, lp);
}
ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT);
setContentView(buttonsView, lp);
這樣工作正常,但你怎么給按鈕邊距,所以它們之間有空間? 我嘗試使用LinearLayout.MarginLayoutParams,但是沒有weight成員,所以這不好。 如果你在它的構造函數中傳遞它lp它也行不通。
這不可能嗎? 因為它確實看起來,并且它不會是第一個Android布局任務,你只能用XML做。
10個解決方案
467 votes
這是一個完成它的小代碼:
LinearLayout ll = new LinearLayout(this);
ll.setOrientation(LinearLayout.VERTICAL);
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
layoutParams.setMargins(30, 20, 30, 0);
Button okButton=new Button(this);
okButton.setText("some text");
ll.addView(okButton, layoutParams);
Mauro answered 2019-02-23T23:45:10Z
62 votes
所以這很好,但實際上如何?? 你給按鈕邊距這樣嗎??? 他們之間有空間嗎?
您可以在LinearLayout.MarginLayoutParams對象上撥打LinearLayout.LayoutParams。
我試過用?? LinearLayout.MarginLayoutParams,但是?? 沒有重量成員,所以不是?? 好。
LinearLayout.LayoutParams是LinearLayout.MarginLayoutParams的子類,如文檔中所述。
這不可能嗎?
沒有。
它不會是第一個Android?? 布局任務只能用XML完成
歡迎您提供此聲明的證明。
就個人而言,我不知道任何只能通過XML而不是通過SDK中的Java方法完成的事情。 事實上,根據定義,一切都必須通過Java來實現(盡管不一定是通過SDK可訪問的方法),因為XML不是可執行代碼。 但是,如果您知道某些事情,請指出它,因為這是SDK中的一個錯誤,應該在某天修復。
CommonsWare answered 2019-02-23T23:46:24Z
30 votes
要直接向項目添加邊距(某些項目允許直接編輯邊距),您可以執行以下操作:
LayoutParams lp = ((ViewGroup) something).getLayoutParams();
if( lp instanceof MarginLayoutParams )
{
((MarginLayoutParams) lp).topMargin = ...;
((MarginLayoutParams) lp).leftMargin = ...;
//... etc
}
else
Log.e("MyApp", "Attempted to set the margins on a class that doesn't support margins: "+something.getClass().getName() );
...這無需了解/編輯周圍的布局。 請注意“instanceof”檢查,以防您嘗試對不支持邊距的內容運行此操作。
Adam answered 2019-02-23T23:46:56Z
19 votes
由于設備屏幕像素密度的變化,總是使用DIP單位以編程方式設置邊距。 如下_
//get resources
Resources r = getResources();
float pxLeftMargin = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 10, r.getDisplayMetrics());
float pxTopMargin = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 10, r.getDisplayMetrics());
float pxRightMargin = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 10, r.getDisplayMetrics());
float pxBottomMargin = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 20, r.getDisplayMetrics());
//get layout params...
LayoutParams params=new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
params.setMargins(Math.round(pxLeftMargin), Math.round(pxTopMargin), Math.round(pxRightMargin), Math.round(pxBottomMargin));
//set margin...
yourLayoutTOsetMargin.setLayoutParams(params);
希望這會有所幫助。
Rupesh Yadav answered 2019-02-23T23:47:23Z
9 votes
我已經使用下面的代碼直接設置了邊距
LinearLayout layout = (LinearLayout)findViewById(R.id.yourrelative_layout);
LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT);
params.setMargins(3, 300, 3, 3);
layout.setLayoutParams(params);
這里唯一要注意的是,應該為以下包android.widget.RelativeLayout.LayoutParams導入LayoutParams,否則將出錯。
Janith answered 2019-02-23T23:47:55Z
7 votes
試試這個
LayoutParams params = new LayoutParams(
LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT
);
params.setMargins(left, top, right, bottom);
yourbutton.setLayoutParams(params);
Karan Bhalodiya answered 2019-02-23T23:48:15Z
7 votes
MarginLayoutParams layoutParams = (MarginLayoutParams) getLayoutParams();
layoutParams.setMargins(leftMargin, topMargin, rightMargin, bottomMargin);
Ginni answered 2019-02-23T23:48:34Z
3 votes
/*
* invalid margin
*/
private void invalidMarginBottom() {
RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) frameLayoutContent.getLayoutParams();
lp.setMargins(0, 0, 0, 0);
frameLayoutContent.setLayoutParams(lp);
}
你應該是視圖類型的wareGroup。在上面的代碼中,我想改變frameLayout的邊距,而frameLayout的視圖組是RelativeLayout,所以你需要轉換為(RelativeLayout.LayoutParams)
Francis Shi answered 2019-02-23T23:49:00Z
3 votes
試試這個:
MarginLayoutParams params = (MarginLayoutParams) view.getLayoutParams();
params.width = 250;
params.leftMargin = 50;
params.topMargin = 50;
Makvin answered 2019-02-23T23:49:20Z
0 votes
這里有單行解決方案:
((LinearLayout.LayoutParams) yourLinearLayout.getLayoutParams()).marginToAdd = ((int)(Resources.getSystem().getDisplayMetrics().density * yourDPValue));
Stappo answered 2019-02-23T23:49:45Z
總結
以上是生活随笔為你收集整理的java layout_java - 以编程方式在LinearLayout中设置边距的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java css_JavaWeb中基本的
- 下一篇: java 设置日期的格式_java时间格