在代码中设置leftMargin和rightMargin值

147 篇文章 0 订阅
127 篇文章 0 订阅
布局文件片段如下:
<LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        ...>

        <GridView
            android:id="@+id/icon"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="@val/l_margin"
            android:layout_marginRight="@val/r_margin"
         .../>
        ...
</LinearLayout>

现在有需求在代码中控制GridView的左右边距,

随着GridView中item个数变化,调整leftMargin和rightMargin的值,

查阅手册后,有两种方式实现比较方便,具体的实验代码片段如下:

public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        LinearLayout root = (LinearLayout) findViewById(R.id.root);
                
        //output screen size information in Logs
        DisplayMetrics dm = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(dm);  
        int width = dm.widthPixels;  
        int height = dm.heightPixels;    
        Log.d("Screen Info", "width:" + width + ", height:" + height);
        
        //left/right margin test (Method --- 01)
        GridView gv = (GridView)findViewById(R.id.testID);  
        LinearLayout.LayoutParams paramTest = (LinearLayout.LayoutParams) gv.getLayoutParams();
        paramTest.leftMargin = 50;
        paramTest.rightMargin = 50;
        gv.setLayoutParams(paramTest);
        Log.d("Screen Info", "LeftMargin:" + paramTest.leftMargin + ", RightMargin:" + paramTest.rightMargin);
}

上面代码片段实现了在代码中设置Margin值的第一种方式,需要说明的是,这里要根据不同布局配置来做转换,

比如这里GridView是在LinearLayout布局内,所以转换为:LinearLayout.LayoutParams

另外,leftMargin和rightMargin分别是LinearLayout.LayoutParams的成员。

        //left/right margin test (Method --- 02)
        GridView gv = (GridView)findViewById(R.id.testID);  
        ViewGroup.MarginLayoutParams paramTest2 = (ViewGroup.MarginLayoutParams) gv.getLayoutParams();
        paramTest2.setMargins(30, 0, 30, 0);
        gv.requestLayout();
        //... ...

上面代码片段是实现该功能的第二种方式,需要说明的是,

这里不再依赖不同的布局文件和根据不同布局做转换的问题,但是组件本身要支持margins的方法才可行

比如下面这个例子:

public static void setMargins (View v, int l, int t, int r, int b) {
    if (v.getLayoutParams() instanceof ViewGroup.MarginLayoutParams) {
        ViewGroup.MarginLayoutParams p = (ViewGroup.MarginLayoutParams) v.getLayoutParams();
        p.setMargins(l, t, r, b);
        v.requestLayout();
    }
}


  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值