Android XML中的内联sdk版本检查?
有时,当我想向布局中添加SDK 21+功能时,我需要在另一个文件中创建整个布局。这对我来说很沉重,因为我想在一个布局中完成或检查所有内容。更多的布局看起来复杂且难以管理。我可以这样做,而不是针对不同的SDK版本使用两种布局:Android XML中的内联sdk版本检查?,android,android-layout,Android,Android Layout,有时,当我想向布局中添加SDK 21+功能时,我需要在另一个文件中创建整个布局。这对我来说很沉重,因为我想在一个布局中完成或检查所有内容。更多的布局看起来复杂且难以管理。我可以这样做,而不是针对不同的SDK版本使用两种布局: <ImageView android:id="@+id/x" android:layout_width="16dp" android:layout_height="wrap_content" <compatibility sdk_
<ImageView
android:id="@+id/x"
android:layout_width="16dp"
android:layout_height="wrap_content"
<compatibility sdk_higher_than="21">
android:elevation="xdp" //my problem not about the elevation. Its just an example that pops in my mind about the compatibility.
</compatibility>
app:srcCompat="@drawable/ic_x" />
我可以用编程的方式制作这些东西,但是当我应该在designer上立即看到视图时,用编程的方式制作它对我来说不是一个好方法。如果有解决这个问题的好方法或想法,有人能告诉我吗?您不能在XML中提供视图提升,也不能在代码中检查SDK版本-如果超过21,则以编程方式提供视图提升 例如:
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
//the API level is above 21 and you can manipulate your view with all the features that available to API level 21+
}
是的,您可以通过添加: 第一次添加:
例如:
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:targetApi="14" >
另外,如果要在代码中动态创建元素:
您还可以在java代码中使用注释来简化操作:
第一次导入:import android.annotation.TargetApi代码>
然后,在方法上方使用此注释:
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
您可以获得更多的注释帮助:
@RequiresApi(Build.VERSION_CODES.LOLLIPOP)
上面的注释警告使用较低API级别的方法。阅读有关requiresApi
的更多信息:
现在,在方法内部,您可以动态生成视图
示例来自:
阅读文档了解更多有关注释的详细信息:您可以使用app:elevation=“xdp”
我不明白您的意思,但更新了问题。您可以检查它。不受支持的XML属性将被忽略(当然,假设它们存在于更高版本中)。你不需要包装它是的,实际上我不擅长XML的基础知识,只知道发生了什么。问题是关于“我们能做出类似的表达吗?”和“Android的路线图上有类似的东西吗?”我的问题不是关于提升。这是关于生产力的,如果它是真的话。请你再解释一遍,你说的“如果它是真的话”是什么意思?在我的回答中,我没有回答spesipic的问题,我这样做是为了检查电话api是否高于21。是的,实际上你是对的。我更新了我的问题。是的,实际上工具:targetApi=“x”看起来像我在找什么。但当我在SDK 17设备上测试targetApi=“21”时,该小部件仍然显示在该设备中。别担心,我做了一点搜索,但还是没有找到我缺少的东西。
@RequiresApi(Build.VERSION_CODES.LOLLIPOP)
private void setUpActionBar() {
// Make sure we're running on Honeycomb or higher to use ActionBar APIs
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
ActionBar actionBar = getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
}
}