我們平常可以直接在xml里設置margin,如:
<ImageView android:layout_margin="5dip" android:src="@drawable/image" />
但是有些情況下,需要在java代碼里來寫,可是View本身沒有setMargin方法,怎么辦呢?
通過查閱android api,我們發現android.view.ViewGroup.MarginLayoutParams有個方法setMargins(left, top, right, bottom).
其直接的子類有: FrameLayout.LayoutParams, LinearLayout.LayoutParams and RelativeLayout.LayoutParams.
使用方法:
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
lp.setMargins(10, 20, 30, 40);
imageView.setLayoutParams(lp);
lp.setMargins(10, 20, 30, 40);
imageView.setLayoutParams(lp);
url:http://greatverve.cnblogs.com/archive/2012/01/29/android-margin.html
MainActivity如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
|
package cn.testfixmargin;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.app.Activity;
/**
* Demo描述:
* 在代碼中設置布局的屬性
* 比如Margin和居中
*
* 注意事項:
* 參見代碼中的詳細注釋
*/
public class MainActivity extends Activity {
private TextView mTextView;
private Button mButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
init();
}
private void init(){
DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
float density=displayMetrics.density;
float fontScale = displayMetrics.scaledDensity;
System.out.println("density="+density+",fontScale="+fontScale);
mTextView=(TextView) findViewById(R.id.textView);
mButton=(Button) findViewById(R.id.button);
mButton.setOnClickListener(new OnClickListenerImpl());
}
private class OnClickListenerImpl implements OnClickListener {
@Override
public void onClick(View v) {
// //--------以下為測試1 在代碼中為控件設置Margin--------
// //注意:
// //1 此處的new RelativeLayout.LayoutParams(int w, int h)參數w,h指的是
// // 該控件的父控件的在布局文件中所設置的寬和高
// //2 此處必須使用RelativeLayout.LayoutParams.FILL_PARENT()
// // 因為其父類為RelativeLayout所以是其父類的布局參數即RelativeLayout.LayoutParams.XXX
// // 注意其官方文檔的描述:
// // Set the layout parameters associated with this view.
// // These supply parameters to the parent of this view specifying how it should be arranged.
// // 也就是說這個setLayoutParams()是給其父控件看的
// // 其實這也好理解:只有父類可以改變子View的位置布局.而不是說子View可以隨意
// // 按照自己的想法擺放自己的位置,而不受父控件控制
// RelativeLayout.LayoutParams layoutParams
// =new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.FILL_PARENT, RelativeLayout.LayoutParams.FILL_PARENT);
// layoutParams.setMargins(280, 0, 0, 0);
// mTextView.setLayoutParams(layoutParams);
// //--------以上為測試1--------
//--------以下為測試2 在代碼中設置控件居中--------
//注意:
//1 此處的new RelativeLayout.LayoutParams(int w, int h)參數w,h指的是
// 該控件在布局文件中所設置的寬和高
//2 同測試1中的描述
RelativeLayout.LayoutParams layoutParams=
new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
layoutParams.addRule(RelativeLayout.CENTER_IN_PARENT);
mTextView.setLayoutParams(layoutParams);
//--------以下為測試2--------
}
}
}
package cn.testfixmargin;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.app.Activity;
/**
* Demo描述:
* 在代碼中設置布局的屬性
* 比如Margin和居中
*
* 注意事項:
* 參見代碼中的詳細注釋
*/
public class MainActivity extends Activity {
private TextView mTextView;
private Button mButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
init();
}
private void init(){
DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
float density=displayMetrics.density;
float fontScale = displayMetrics.scaledDensity;
System.out.println("density="+density+",fontScale="+fontScale);
mTextView=(TextView) findViewById(R.id.textView);
mButton=(Button) findViewById(R.id.button);
mButton.setOnClickListener(new OnClickListenerImpl());
}
private class OnClickListenerImpl implements OnClickListener {
@Override
public void onClick(View v) {
// //--------以下為測試1 在代碼中為控件設置Margin--------
// //注意:
// //1 此處的new RelativeLayout.LayoutParams(int w, int h)參數w,h指的是
// // 該控件的父控件的在布局文件中所設置的寬和高
// //2 此處必須使用RelativeLayout.LayoutParams.FILL_PARENT()
// // 因為其父類為RelativeLayout所以是其父類的布局參數即RelativeLayout.LayoutParams.XXX
// // 注意其官方文檔的描述:
// // Set the layout parameters associated with this view.
// // These supply parameters to the parent of this view specifying how it should be arranged.
// // 也就是說這個setLayoutParams()是給其父控件看的
// // 其實這也好理解:只有父類可以改變子View的位置布局.而不是說子View可以隨意
// // 按照自己的想法擺放自己的位置,而不受父控件控制
// RelativeLayout.LayoutParams layoutParams
// =new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.FILL_PARENT, RelativeLayout.LayoutParams.FILL_PARENT);
// layoutParams.setMargins(280, 0, 0, 0);
// mTextView.setLayoutParams(layoutParams);
// //--------以上為測試1--------
//--------以下為測試2 在代碼中設置控件居中--------
//注意:
//1 此處的new RelativeLayout.LayoutParams(int w, int h)參數w,h指的是
// 該控件在布局文件中所設置的寬和高
//2 同測試1中的描述
RelativeLayout.LayoutParams layoutParams=
new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
layoutParams.addRule(RelativeLayout.CENTER_IN_PARENT);
mTextView.setLayoutParams(layoutParams);
//--------以下為測試2--------
}
}
}
|
main.xml如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
android:layout_width
=
"fill_parent"
android:layout_height
=
"fill_parent"
>
<
TextView
android:id
=
"@+id/textView"
android:layout_width
=
"wrap_content"
android:layout_height
=
"wrap_content"
android:text
=
"@string/hello_world"
android:textSize
=
"25sp"
android:layout_marginLeft
=
"20dip"
/>
<
Button
android:id
=
"@+id/button"
android:layout_width
=
"wrap_content"
android:layout_height
=
"wrap_content"
android:text
=
"Click"
android:textSize
=
"25sp"
android:layout_centerInParent
=
"true"
/>
</
RelativeLayout
>
android:layout_width
=
"fill_parent"
android:layout_height
=
"fill_parent"
>
<
TextView
android:id
=
"@+id/textView"
android:layout_width
=
"wrap_content"
android:layout_height
=
"wrap_content"
android:text
=
"@string/hello_world"
android:textSize
=
"25sp"
android:layout_marginLeft
=
"20dip"
/>
<
Button
android:id
=
"@+id/button"
android:layout_width
=
"wrap_content"
android:layout_height
=
"wrap_content"
android:text
=
"Click"
android:textSize
=
"25sp"
android:layout_centerInParent
=
"true"
/>
</
RelativeLayout
>
|