我到处搜索,根本找不到任何方法:
在我的项目中,我有两个用于布局的资源文件夹:一个称为“layout”,另一个称为“layout-land”。这是根据当前方向为每个 Activity 使用两个独立布局的熟悉方式。问题是我没有为每个 Activity 单独的“layout-land”布局,而且并不是所有的 Activity 甚至都需要不同的横向模式布局。
我所做的是覆盖默认值onConfigurationChanged
以防止发生方向更改(configChanges="orientation"
在清单中使用适当的)。每次用户倾斜屏幕时,这让我省去了很多将东西塞进 Bundle 中的麻烦。但是,在某些情况下,我实际上希望发生方向变化。每当“layout-land”文件夹中有相应的布局时,我希望方向像往常一样改变。每当没有时,我想onConfigurationChanged
抑制方向更改事件。
我创建了一个父BaseActivity
类,它扩展Activity
并且是我所有活动的基类,并覆盖onConfigurationChanged
:
@Override
public void onConfigurationChanged(android.content.res.Configuration newConfig)
{
super.onConfigurationChanged(newConfig);
if(...there is a layout-land version of the current activity's layout...)
{
setRequestedOrientation(newConfig.orientation);
}
else
{
// Do nothing, since raising the orientation change event
// to change from a portrait layout to the same portrait layout is silly.
}
}
唯一的障碍是我找不到任何方法来确定我的布局资源是否有布局版。我已经知道当前布局的资源 id(BaseActivity
通过覆盖在我的班级的其他地方获得setContentView
),但是布局的横向版本和纵向版本共享相同的 id,我看不到Resources
对象告诉我哪个简单的方法当我通过 id 向它询问特定资源时它给我的布局版本。必须有办法做到这一点。我错过了什么?