在阐述我所遇到的问题之前,先通过查看Android源码发现这样几个代码样例:

1.

grep extends\ ViewGroup.MarginLayoutParams  ./core/java/android/widget/ -rn./core/java/android/widget/RelativeLayout.java:1030:    public static class LayoutParams extends ViewGroup.MarginLayoutParams {./core/java/android/widget/LinearLayout.java:1739:    public static class LayoutParams extends ViewGroup.MarginLayoutParams {

2.

grep class\ MarginLayoutParams  core/java/android/view/ViewGroup.java -rn  5376:    public static class MarginLayoutParams extends ViewGroup.LayoutParams {

3.在measureChildWithMargins()方法中发现child.getLayoutParams()得到的LayoutParams可以直接转换成MarginLayoutParams。

protected void measureChildWithMargins(View child,            int parentWidthMeasureSpec, int widthUsed,            int parentHeightMeasureSpec, int heightUsed) {        final MarginLayoutParams lp = (MarginLayoutParams) child.getLayoutParams();        final int childWidthMeasureSpec = getChildMeasureSpec(parentWidthMeasureSpec,                mPaddingLeft + mPaddingRight + lp.leftMargin + lp.rightMargin                        + widthUsed, lp.width);        final int childHeightMeasureSpec = getChildMeasureSpec(parentHeightMeasureSpec,                mPaddingTop + mPaddingBottom + lp.topMargin + lp.bottomMargin                        + heightUsed, lp.height);        child.measure(childWidthMeasureSpec, childHeightMeasureSpec);    }


OK,那么综上所述,得出的结论是:当一个view子控件是使用在RelativeLayout和LinearLayout中的时候,其getLayoutParams()获取的LayoutParams对象其实是MarginLayoutParams对象的实现。


这个问题解决了我所遇到的一个问题,即我在做一个自定义控件的时候,需要控制自定义控件的滑动,但是当我改变了页面的布局的时候,所有布局重新刷新了一边,这样导致这个控件又回到了起始位置,因此,得出这个结论之后,直接设置其参数即可,比如:

MarginLayoutParams marginLP = (MarginLayoutParams)getLayoutParams();if (marginLP != null) {marginLP.topMargin = 300;}

对于其他控件,有兴趣者可自行研究,这里不再赘述。




更多相关文章

  1. Android(安卓)Studio http://schemas.android.com/apk/res/andro
  2. Android(安卓)declare-styleable:自定义控件的属性(attr.xml,Type
  3. 【Android】Web开发之使用WebView控件展示Web页面
  4. android gridview 行高设置
  5. 三、安卓UI学习(1)
  6. android用户界面之按钮(Button)教程实例汇
  7. 在Fragment中设置控件点击方法,执行失败。
  8. TabHost与RadioGroup结合完成的菜单【带效果图】5个Activity
  9. Android常用控件

随机推荐

  1. Android(安卓)自动更新 + IIS7 添加APK m
  2. Android(安卓)事件处理
  3. 【Android】View类详解 (游戏开发必备)
  4. Android-Task Affinity
  5. Android自带音乐播放器专辑图片相同的问
  6. 使用Manifest Editor
  7. 用android studio写一个简单的计算器
  8. Android中View,SurfaceView和GLSurfaceVie
  9. Android开发底部点击按钮从屏幕底部滑出
  10. Android(安卓)中 KeyEvent keycode 配置