1、对于一个没有被载入或者想要动态载入的界面,都需要使用LayoutInflater.inflate()来载入;
2、对于一个已经载入的界面,就可以使用Activiyt.findViewById()方法来获得其中的界面元素。
主要用到的方法:
LayoutParams(宽,高):
LayoutParams 是ViewGroup的一个内部类,这是一个基类,主要描述了宽高.LayoutParams携带了子控件针对父控件的信息, 告诉父控件如何放置自己
宽与高有三种指定方式
每一个ViewGroup(例如LinearLayout, RelativeLayout, CoordinatorLayout, etc)需要存储有关其孩子view的属性信息。它的孩子view被放在ViewGroup,这些位置信息存储在一个包装类viewgroup.layoutparams对象中。
为了包含一个特定的布局的具体参数,viewgroup使用layoutparams Viewgroup类的子类来存储。
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(vgLp);
params.addRule(RelativeLayout.RIGHT_OF,R.id.mTvBlue);
LinearLayout.LayoutParams textParams = new LinearLayout.LayoutParams(textView.getLayoutParams());
textParams.width = dip2px(LikeXmlActivity.this,200);
textParams.height = dip2px(LikeXmlActivity.this,30);
textView.setLayoutParams(textParams);
获取ViewGroup.LayoutParams
getLayoutParams()方法可以获取ViewGroup.LayoutParams对象。但是不能设置
不能使用ViewGroup.LayoutParams而必须使用对应父View的LayoutParams类型。如:
某View被LinearLayout包含,则该View的setLayoutParams参数类型必须是LinearLayout.LayoutParams。
原因在于LinearLayout(或其他继承自ViewGroup的layout,如:RelativeLayout)在进行递归布局的时候,LinearLayout会获取子View的LayoutParams,并强制转换成LinearLayout.LayoutParams
高度和宽度是从ViewGroup.MarginLayoutParams.继承而来,因此getLayoutParams() 而ViewGroup.MarginLayoutParams 又是从ViewGroup.LayoutParams继承而来
要么直接ViewGroup.LayoutParams.设置宽高为WRAP_CONTENT或者FILL_PARENT
要么子view.getLayoutParams() 然后设置具体的宽高
如:在Linearlayout中添加textView
LinearLayout.LayoutParams textParams = new LinearLayout.LayoutParams(textView.getLayoutParams());//父控件动态设置子控件的宽高
textParams.width =200;//设置文字宽
textParams.height = 30;//设置文字高
//或者这样设置
textParams.height = ViewGroup.LayoutParams.MATCH_PARENT;
textParams.width = ViewGroup.LayoutParams.MATCH_PARENT;
//textParams.gravity = Gravity.CENTER; // 无效,这样并不能让文字在控件里居中
textView.setLayoutParams(textParams);//利用setLayoutParams方法对控件的layout进行布局更新
如:在linearLayout控件中添加一个textView控件
首先,创建线性布局对象
LinearLayout layout = new LinearLayout(this);//为本Activity创建一个线性布局对象
//并且设置它的属性 android:layout_width 与 android:layout_height 都为 FILL_PARENT
//布局方面的属性设置方式
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,ViewGroup.LayoutParams.FILL_PARENT);
然后,为本Activity创建一个TextView
TextView textView = new TextView(this);
//然后设置TextView的属性
textView.setText(R.string.hello);
textView.setId(34);
//对于布局方面的属性这样来设置
LinearLayout.LayoutParams textviewParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
//这样直接设置了textview 的宽为FILL_PARENT 高为WRAP_CONTENT
//也可以这样设置 但是通过getLayoutParams()获取textView的getLayoutParams()对象时 textView必须父view.addView()出来
LinearLayout.LayoutParams textParams = new LinearLayout.LayoutParams(textView.getLayoutParams());
textParams.width = 100;
textParams.height = 30;
// 高度和宽度是从ViewGroup.MarginLayoutParams.继承而来,因此getLayoutParams() 而ViewGroup.MarginLayoutParams 又是从ViewGroup.LayoutParams继承而来
//因此两种方式
//要么直接ViewGroup.LayoutParams.设置宽高为WRAP_CONTENT或者FILL_PARENT
//要么子view.getLayoutParams() 然后设置具体的宽高
接着在线性布局对象中加入这个TextView
layout.addView(textView,textviewParams);//加入的同时,也就设置了TextView相对于布局对象的布局属性 android:layout_width 与 android:layout_height
最后一步,设置本Activity的顶级界面为线性布局
setContentView(layout,layoutParams); //同时也就设置了布局对象的android:layout_width 与 android:layout_height
如:在MainActivity中动态设置ImageView的属性
public class MainActivity extends Activity {
private ImageView img;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initViews();
}
/**
* @方法描述:
* @author lizhenya
*/
private void initViews() {
img = (ImageView) findViewById(R.id.img);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
img.getLayoutParams());
/**
* 高度和宽度是从ViewGroup.MarginLayoutParams继承而来,ViewGroup.MarginLayoutParams的高度和宽度又是
* 从ViewGroup.Params继承而来,是基本的属性.
*/
params.height = ViewGroup.LayoutParams.MATCH_PARENT;
params.width = ViewGroup.LayoutParams.MATCH_PARENT;
/**
* margin属性是从ViewGroup.MarginLayoutParams继承而来。
*/
params.setMargins(200, 200, 0, 0);
//LinearLayout.LayoutParams自身的属性
params.gravity = Gravity.CENTER;
params.weight = (float) 1.0;
img.setLayoutParams(params);
}
}
setContentView(对象);或者通过addView(对象)加载后 通过setLayoutParams(对象)实现布局更新;