Android XML中的内联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_

有时,当我想向布局中添加SDK 21+功能时,我需要在另一个文件中创建整个布局。这对我来说很沉重,因为我想在一个布局中完成或检查所有内容。更多的布局看起来复杂且难以管理。我可以这样做,而不是针对不同的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);
    }
}