自定义属性 - 方向更改

时间:2013-07-16 09:50:26

标签: android android-layout android-custom-view android-orientation

我目前正面临非常具体的挑战。 事情就是这样:

我构建了一个自定义视图,我想从xml布局设置一个特定的属性。 我在视图的构造函数中获取自定义属性。 现在,在方向更改后,此构造函数不再被调用,但我为自定义属性设置了不同的值。 有没有办法自动获取这些新值,还是我必须手动设置方向更改(或再次膨胀)?

自定义视图:

public MyCustomView(Context context, AttributeSet attrs) {
   super(context, attrs);
   TypedArray a = context.getTheme().obtainStyledAttributes(
        attrs,
        R.styleable.MyCustomView,
        0, 0);

   try {
       mAttr = a.getBoolean(R.styleable.MyCustomView_customAttr, false);
   } finally {
       a.recycle();
   }
}

布局景观

<com.me.MyCustomView
     custom:customAttr="false" />

布局画像

<com.me.MyCustomView
     custom:customAttr="true" />

感谢任何建议!

1 个答案:

答案 0 :(得分:1)

您是否在清单活动中使用android:configChanges="orientation"

像这样:

<activity android:name=".MyActivity"
          android:configChanges="orientation|keyboardHidden"
          android:label="@string/app_name">

如果您这样做,则要求您自行管理方向更改,因此您有责任根据需要重新创建视图(重新充气,是)。您可以在活动中的onConfigurationChanged()来电中执行此操作。

但是如果删除此设置,默认情况下应该重新创建Activity,因此,您的布局将使用新属性再次构建...

在本主题中解释:oncreate called on every re-orientation

有关Handling Runtime changes here的更多信息。