MainActivity如下:
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如下:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" 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> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" 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>