日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java layout_java - 以编程方式在LinearLayout中设置边距

發布時間:2025/4/17 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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中设置边距的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。