zoukankan      html  css  js  c++  java
  • Android利用setLayoutParams在代码中调整布局(Margin和居中)

    我们平常可以直接在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);

    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
    <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>
  • 相关阅读:
    js中的日期控件My97 DatePicker
    list中慎用remove
    ehcache注解全面解析
    servlet
    SpringMVC注解@RequestMapping全面解析
    SpringMVC注解@RequestParam全面解析
    lucene全文检索
    jenkins和hudson
    Mysql与PostgreSql数据库学习笔记
    前端学习笔记
  • 原文地址:https://www.cnblogs.com/exmyth/p/4634388.html
Copyright © 2011-2022 走看看