您的位置:首页 > 编程语言 > PHP开发

使用LayoutParams来动态修改组件的相对属性

2016-05-27 22:18 537 查看
自从Android问世以来,一直很多人问如何使用Java代码来完成布局文件中的工作,也就是如何用Java代码设置组件的属性。这个问题对于其他的编程语言(如C#、C++、Pascal)可能并不复杂,组件类中都提供了相应的设置属性的方法,但遗憾的是Android SDK中的组件类只提供了很少的设置属性的方法,大多数的属性并没有直接对应的获得和设置属性值的方法。

事实上,使用Java代码可以设置所有的组件属性,所有这一切只需要一个LayoutParams对象。

使用LayoutParams.addRule方法可以设置组件中的所有属性值。最后再调用View.setLayoutParams方法用刚才创建的LayoutParams对象更新View中的相应属性值。

下面是一个例子的源代码:

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.RelativeLayout;
public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(R.layout.dymamic_setting_demo);
setButton();
}
public void setButton(){
//装载要动态修改的按钮
Button button=(Button)findViewById(R.id.example_button2);
//创建一个LayoutParams对象
RelativeLayout.LayoutParams layoutParams =
new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT);
//设置android:layout_centerInParent属性,后面不跟其他参数默认True
layoutParams.addRule(RelativeLayout.CENTER_IN_PARENT);
//利用LayoutParams对象更新Button按钮中相应属性值
button.setLayoutParams(layoutParams);
button.setText("修改后的按钮");
}
}


其对应的XML布局文件dymamic_setting_demo.xml代码如下

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/example_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="参照按钮"/>
<Button
android:id="@+id/example_button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="ddd "/>

</RelativeLayout>


本来按照布局文件的属性设置,2个按钮应该是重合的,并且button2 的文本为DDD,在运行后,实际的界面经过Java代码中的动态修改后,按钮2被居中,并且文本被修改了,如下:



这是一个最简单的DEMO ,应该也不需要上传源码了,在这个原理上可以衍生出很多在一些应用中能够常常见到的功能,例如微信在收到语音后就需要动态的更进一个按钮以便用户点击等等。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android