Bob*_*obs 68 resources android android-layout
假设我在不同的资源文件夹中有三种不同布局的活动.例如:
layout-land/my_act.xml
layout-xlarge/my_act.xml
layout-xlarge-land/my_act.xml
在不同的设备和不同的位置,其中一个由Android选择.
如何找出以编程方式选择的?
Android是否有任何API将这些布局返回给程序?
编辑:Graham Borland的解决方案在我在评论中提到的某些情况下存在问题.
Gra*_*and 70
您可以android:tag在每个不同的资源文件中的视图上设置不同的属性,并在运行时使用View.getTag().
例:
布局XLARGE土地/ my_act.xml
<View
android:id="@+id/mainview"
android:tag="xlarge-landscape"
/>
Run Code Online (Sandbox Code Playgroud)
布局XLARGE/my_act.xml
<View
android:id="@+id/mainview"
android:tag="xlarge-portrait"
/>
Run Code Online (Sandbox Code Playgroud)
MyActivity.java
String tag = view.getTag();
if (tag.equals("xlarge-landscape") {
...
}
Run Code Online (Sandbox Code Playgroud)
Edw*_*ale 42
您可以values-<config>为每个支持的配置创建一个目录.在每个目录中,strings.xml使用单个selected_configuration字符串创建一个描述当前配置的字符串.在运行时,使用标准getString方法获取字符串,该方法将为您执行配置解析并为配置返回正确的字符串.这是未经测试的.
我的回答是从@Graham Borland实现的
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
switch(metrics.densityDpi){
case DisplayMetrics.DENSITY_LOW:
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE)
{
Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
String tag = view.getTag();
if (tag.equals("small-landscape") {
.....
}
}
else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT)
{
Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
String tag = view.getTag();
if (tag.equals("small-potrait") {
.....
}
}
break;
case DisplayMetrics.DENSITY_MEDIUM:
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE)
{
Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
String tag = view.getTag();
if (tag.equals("medium-landscape") {
.....
}
}
else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT)
{
Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
String tag = view.getTag();
if (tag.equals("medium-potrait") {
.....
}
}
break;
case DisplayMetrics.DENSITY_HIGH:
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE)
{
Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
String tag = view.getTag();
if (tag.equals("large-landscape") {
.....
}
}
else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT)
{
Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
String tag = view.getTag();
if (tag.equals("large-potrait") {
.....
}
}
break;
}
Run Code Online (Sandbox Code Playgroud)
这将适用于API lavel 4或更高版本.
| 归档时间: |
|
| 查看次数: |
23316 次 |
| 最近记录: |