Android利用setLayoutParams在代码中调整布局(Margin和居中)

MainActivity如下:

[java][/java] view plaincopy

  1. package cn.testfixmargin;
  2. import android.os.Bundle;
  3. import android.util.DisplayMetrics;
  4. import android.view.View;
  5. import android.view.View.OnClickListener;
  6. import android.widget.Button;
  7. import android.widget.RelativeLayout;
  8. import android.widget.TextView;
  9. import android.app.Activity;
  10. /**
  11.  * Demo描述:
  12.  * 在代码中设置布局的属性
  13.  * 比如Margin和居中
  14.  *
  15.  * 注意事项:
  16.  * 参见代码中的详细注释
  17.  */
  18. public class MainActivity extends Activity {
  19.     private TextView mTextView;
  20.     private Button mButton;
  21.     @Override
  22.     protected void onCreate(Bundle savedInstanceState) {
  23.         super.onCreate(savedInstanceState);
  24.         setContentView(R.layout.main);
  25.         init();
  26.     }
  27.     private void init(){
  28.         DisplayMetrics displayMetrics = new DisplayMetrics();
  29.         getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
  30.         float density=displayMetrics.density;
  31.         float fontScale = displayMetrics.scaledDensity;
  32.         System.out.println(“density=”+density+”,fontScale=”+fontScale);
  33.         mTextView=(TextView) findViewById(R.id.textView);
  34.         mButton=(Button) findViewById(R.id.button);
  35.         mButton.setOnClickListener(new OnClickListenerImpl());
  36.     }
  37.     private class OnClickListenerImpl implements OnClickListener {
  38.         @Override
  39.         public void onClick(View v) {
  40. //         //——–以下为测试1 在代码中为控件设置Margin——–
  41. //         //注意:
  42. //         //1  此处的new RelativeLayout.LayoutParams(int w, int h)参数w,h指的是
  43. //         //  该控件的父控件的在布局文件中所设置的宽和高
  44. //         //2  此处必须使用RelativeLayout.LayoutParams.FILL_PARENT()
  45. //         //  因为其父类为RelativeLayout所以是其父类的布局参数即RelativeLayout.LayoutParams.XXX
  46. //         //  注意其官方文档的描述:
  47. //         //  Set the layout parameters associated with this view.
  48. //         //  These supply parameters to the parent of this view specifying how it should be arranged.
  49. //         //  也就是说这个setLayoutParams()是给其父控件看的
  50. //         //  其实这也好理解:只有父类可以改变子View的位置布局.而不是说子View可以随意
  51. //         //  按照自己的想法摆放自己的位置,而不受父控件控制
  52. //           RelativeLayout.LayoutParams layoutParams
  53. //           =new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.FILL_PARENT, RelativeLayout.LayoutParams.FILL_PARENT);
  54. //           layoutParams.setMargins(280, 0, 0, 0);
  55. //           mTextView.setLayoutParams(layoutParams);
  56. //           //——–以上为测试1——–
  57.             //——–以下为测试2 在代码中设置控件居中——–
  58.             //注意:
  59.             //1  此处的new RelativeLayout.LayoutParams(int w, int h)参数w,h指的是
  60.             //  该控件在布局文件中所设置的宽和高
  61.             //2  同测试1中的描述
  62.             RelativeLayout.LayoutParams layoutParams=
  63.             new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
  64.             layoutParams.addRule(RelativeLayout.CENTER_IN_PARENT);
  65.             mTextView.setLayoutParams(layoutParams);
  66.             //——–以下为测试2——–
  67.         }
  68.     }
  69. }

main.xml如下:

[html][/html] view plaincopy

  1. <RelativeLayout xmlns:android=”http://schemas.android.com/apk/res/android”
  2.     xmlns:tools=”http://schemas.android.com/tools”
  3.     android:layout_width=”fill_parent”
  4.     android:layout_height=”fill_parent”
  5.      >
  6.     <TextView
  7.         android:id=”@+id/textView”
  8.         android:layout_width=”wrap_content”
  9.         android:layout_height=”wrap_content”
  10.         android:text=”@string/hello_world”
  11.         android:textSize=”25sp”
  12.         android:layout_marginLeft=”20dip”
  13.     />
  14.     <Button
  15.         android:id=”@+id/button”
  16.         android:layout_width=”wrap_content”
  17.         android:layout_height=”wrap_content”
  18.         android:text=”Click”
  19.         android:textSize=”25sp”
  20.         android:layout_centerInParent=”true”
  21.      />
  22. </RelativeLayout>

标签