利用setLayoutParams在代码中调整布局(Margin和居中)-阿里云开发者社区

开发者社区> 小弟的谷哥> 正文

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

简介: MainActivity如下: package cn.testfixmargin; import android.os.Bundle; import android.
+关注继续查看

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>


 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
10058 0
ASP.NET C# 用后台代码实现 跨域名访问 返回HTML代码
这份资源  我找了很久 终于找到了!  非常感谢提供这份资源的人,你很牛B! 原链接: http://www.7net.cn/web/sitetech/ASPbiancheng/200908181503.
818 0
用后台代码创建Storyboard
            string storyboardName = "MyStoryBoard";             string myXamlElement = "MyXamlElement";             int newLeftPosition = 120;             Storyboard sb = XamlReader.
621 0
WPF Path.Data 后台代码赋值
Path path = new Path(); string sData = "M 250,40 L200,20 L200,60 Z"; var converter = TypeDescriptor.
1224 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13874 0
kubernetes代码阅读-apiserver之list-watch篇
apiserver的list-watch代码解读 list-watch,作为k8s系统中统一的异步消息传递方式,对系统的性能、数据一致性起到关键性的作用。今天我想从代码这边探究一下list-watch的实现方式。
3048 0
+关注
小弟的谷哥
welcome
766
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载