使用LayoutParams来动态修改组件的相对属性
2016-05-27 22:18
537 查看
自从Android问世以来,一直很多人问如何使用Java代码来完成布局文件中的工作,也就是如何用Java代码设置组件的属性。这个问题对于其他的编程语言(如C#、C++、Pascal)可能并不复杂,组件类中都提供了相应的设置属性的方法,但遗憾的是Android SDK中的组件类只提供了很少的设置属性的方法,大多数的属性并没有直接对应的获得和设置属性值的方法。
下面是一个例子的源代码:
其对应的XML布局文件dymamic_setting_demo.xml代码如下
本来按照布局文件的属性设置,2个按钮应该是重合的,并且button2 的文本为DDD,在运行后,实际的界面经过Java代码中的动态修改后,按钮2被居中,并且文本被修改了,如下:
这是一个最简单的DEMO ,应该也不需要上传源码了,在这个原理上可以衍生出很多在一些应用中能够常常见到的功能,例如微信在收到语音后就需要动态的更进一个按钮以便用户点击等等。
事实上,使用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 ,应该也不需要上传源码了,在这个原理上可以衍生出很多在一些应用中能够常常见到的功能,例如微信在收到语音后就需要动态的更进一个按钮以便用户点击等等。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories