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

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指的是
//		   //  该控件的的宽和高.也可以利用layoutParams.width和layoutParams.height重新设置宽高
//		   //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指的是
			//  该控件在布局文件中所设置的宽和高.也可以利用layoutParams.width和layoutParams.height重新设置宽高
			//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>

 

时间: 2024-12-23 06:07:06

利用setLayoutParams在代码中调整布局(Margin和居中)的相关文章

利用流水线改进代码中的if处理流程

本文用到的编程语言为C#,具体思路不限制编程语言. 刚才正在浏览http://ruby-china.org/topics/7384的时候,看到5楼的回复,突然有一种想法,不知道优劣,请大家帮忙评判一下,或者给出一些更好的实现方案. 我们先来上一段代码,就是常见的一种代码. Order getOrder(string orderNo) { order = repo.getOrder(orderNo); if(order.condition1) { ... } if(order.condition2

利用FindBugs减少代码中的bug数学习

FindBugs 作用 开发人员在开发了一部分代码后,可以使用FindBugs进行代码缺陷的检查.提高代码的质量,同时也可以减少测试人员给你报的bug数. 静态分析工具承诺无需开发人员费劲就能找出代码中已有的缺陷.当然,如果有多年的编写经验,就会知道这些承诺并不是一定能兑现. 代码缺陷分类 根据缺陷的性质,大致可以分为下列几类 ·Bad practice  不好的做法·Correctness   可能有不正确·Dodgy code     糟糕的代码·Experimental  实验·Inter

Android中GridView布局实现整体居中方法示例

前言 本文主要给大家介绍了关于Android中GridView布局整体居中的相关内容,是对于自己在项目中遇到问题的一个记录,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 效果图: 示例代码: /** * 对高度和宽度进行统计 然后设置gridView的宽高. * @param numColumns 设定行数 * @param gridView */ public static void calGridViewSumWH(int numColumns ,GridView gri

android-安卓开发 如何在代码中动态切换fragment加载的布局文件?

问题描述 安卓开发 如何在代码中动态切换fragment加载的布局文件? viewpager和fragment一起用的时候,比如有啊,吧,a,b,c,三页,一开始显示的是a,我想当用户滑到b和c时先显示的是一个loding的圆环进度条,之后再显示这个fragment的内容,请问应该如何做? 解决方案 上面说的是fragment之间的切换,你这个问题直接用view.setVisibility()方法控制进度条隐藏或显示就好了,也可以吧进度条放在Dialog或pupopWindow等当中控制show

android代码布局-android 代码中设置控件的垂直居中和两个控件之间的距离。

问题描述 android 代码中设置控件的垂直居中和两个控件之间的距离. 因为数据是动态的 所以所有的控件和布局都是在java代码里面设置 怎样才能让一个控件垂直居中 还有两个控件之间的距离又是怎么设置的啊 求高手指点啊 最好能给点代码 我是新手 说的太笼统了 看不太懂 谢谢了 解决方案 LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.FILL_PARENT,

android 如何在java代码中方便的调用xml写的布局??

问题描述 android 如何在java代码中方便的调用xml写的布局?? 我想在activity刷新的时候重新生成一些xml写的布局,并放在 "求学"那一栏下: 想问一下有没有什么方便的方法??? 解决方案 可控的话 先加载求学哪里 先设visible为gone. 需要的时候设置为visible 解决方案二: 楼上说得对,先把控件实例化然后把visiblity设为gone 然后调用刷新按钮的时候吧实例传过去,再重新设置visiblity 解决方案三: 一种是隐藏然后显示,最好是用动态

Android在代码中设置沉浸式布局的方法

先导入该包,进行 系统systemBar 管理 compile 'com.readystatesoftware.systembartint:systembartint:1.0.3' 在BaseActivity中添加 该 字段: public class BaseActivity extends Activity{ @Override protected void onCreate(Bundle savedInstanceState) { if (Build.VERSION.SDK_INT >=

看实例学VFP:利用多个表中的字段创建新表

本例中再来复习一下select语句中的inner join子句的知识,关于select语句请参考:select SQL 命令 或sql语言教程.本例的主要操作是在表单的init事件中完成的,在该事件中进行连接查询并将查询结果输出为一个临时表(该表包括了"人员信息表"的"姓名,性别,基本工资"3个字段以及"工资表"的"奖金,生活补助,养老保险"3个字段),最后将该表设为表格控件的数据源.本例应用到了数据环境,并使用"数

Dreamweaver中窗口布局的方法

  DREAMWEAVER编辑网页 的时候,经常需要 插入一些图象什么的,假设要插入的图象很多,按照常规方法来操作就显 得非常麻烦.本文对Dreamweaver中窗口布局 进行了具体阐述供阅读. 1.巧妙调用STYLE 熟悉网页设计的网友就知道,调用STYLE的方法很多,我们可以单击鼠 标右键选择CUSTON STYLE来调用STYLE标准,也可以在状态栏中的元素列表 上单击右键来调用STYLE.虽然不同的方法达到的效果看似一样,但实际上 产生的HTML代码则完全不同.比如用CUSTON STY