2

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

我构建了一个自定义视图,我想在其中从 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" />

感谢您的任何建议!

4

1 回答 1

1

您是否 在清单android:configChanges="orientation" 中的Activity上使用?

像这样 :

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

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

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

正如本主题中所解释的那样:oncreate 在每次重新定向时调用

有关在此处处理运行时更改的更多信息。

于 2013-07-16T10:11:45.993 回答