如何调用带sw320dp限定符的activity_main布局文件?
正确调用带限定符布局的方法
首先要纠正Android资源限定符的使用误区:
- Android的资源限定符是加在资源文件夹名称后,不能加在布局文件名称里,你当前的文件命名方式不符合Android资源命名规范,会导致R文件无法生成对应ID。
- 正确的文件夹结构应该按如下规则设置:
- 默认布局文件夹:
res/layout/下存放默认的activity_main.xml布局 - 带sw320dp限定符的布局文件夹:新建
res/layout-sw320dp/,在该文件夹下存放你要调用的灰色布局,文件名称同样为activity_main.xml,和默认布局的文件名完全一致即可。
- 默认布局文件夹:
调整完文件结构后,不需要在代码中额外加限定符,Android会自动根据当前设备的屏幕参数匹配对应限定符的资源,直接用常规方式加载布局即可:
public class MainActivity extends AppCompatActivity { @Override protected void onCreate (Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } }
如果有特殊需求要在代码中手动强制加载sw320dp限定符对应的布局,可以通过调整Context配置实现:
// 构造带sw320dp限定符配置的Context Configuration config = new Configuration(getResources().getConfiguration()); config.smallestScreenWidthDp = 320; Context sw320Context = createConfigurationContext(config); // 从定制化Context中获取对应布局资源 setContentView(sw320Context.getResources().getIdentifier("activity_main", "layout", getPackageName()));
注意:无特殊需求不建议手动强制指定资源匹配规则,系统自动匹配的逻辑已经覆盖绝大多数使用场景,手动修改配置可能引发其他资源加载异常。
内容的提问来源于stack exchange,提问作者user16219033
相关产品推荐
相关产品推荐

