如何知道Activity上的配置已更改?

时间:2015-09-27 10:51:36

标签: android android-activity onconfigurationchanged

当配置中有任何更改时,系统会在onConfigurationChanged上调用

Activity方法。此方法仅针对configChanges属性在清单中定义的那些配置进行调用。

我在这个configChanges属性中定义了多个配置(orientation | screenSize),我想检测哪些配置已经改变,以便我可以根据这个改变做一些工作,我怎样才能实现此?

要解决此问题,我有以下代码段:

public class MyActivity extends AppCompatActivity {
    private final String TAG = "my-activity";

    private Configuration prevConfig;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    protected void onResume () {
        super.onResume();
        prevConfig = new Configuration(getResources().getConfiguration());
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        int diff = newConfig.diff(prevConfig);

        if(((diff & ActivityInfo.CONFIG_ORIENTATION) != 0)
                || ((diff & ActivityInfo.CONFIG_SCREEN_SIZE) != 0)) {
            Log.d(TAG, "Orientation or Screen size has been changed.");
        }

        // other configuration change checking goes here

        prevConfig = new Configuration(newConfig);
    }
}

通过这个我可以检测到哪个配置已被更改。

我想知道这是否是达到目标的最佳途径?

0 个答案:

没有答案