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 android:name=".MyActivity"
          android:configChanges="orientation|keyboardHidden"
          android:label="@string/app_name">

そうする場合、向きの変更を自分で管理することを要求しているため、必要に応じてビューを再作成する必要があります (再膨張、はい)。ActivityonConfigurationChanged()の呼び出しで実行できます。

ただし、この設定を削除すると、デフォルトでアクティビティが再作成されるため、レイアウトは新しい属性で再度作成されます...

このトピックで説明するように: oncreate はすべての方向変更で呼び出されます

ランタイムの変更の処理の詳細については、こちら を参照してください。

于 2013-07-16T10:11:45.993 に答える