不同xml版本文件夹(NavigationView)的条件代码

时间:2019-12-09 13:50:19

标签: android android-studio

我的应用程序可以从API 22到28正常工作,上面有一个NavigationView,但不适用于API 22,所以我为此版本创建了一个文件夹,用于该版本的其他xml文件,没有NavigationView,因此我文件夹:

res/layout/activity_layout.xml
res/layout-v22/activity_layout.xml
res/layout-v23/activity_layout.xml

我想添加代码以了解我是否正在使用layout-v22 /文件夹,并且不构建NavigationView,我做了类似的事情:

if(Build.VERSION.SDK_INT!=22){
    navigationView = (NavigationView) findViewById(R.id.nav_view);
}

但是我看到一个错误,因为找不到R.id.nav_view(无法解析符号'nav_view')。

另一种尝试是检查资源是否存在:

if(getResources().getIdentifier("nav_view","layout",getPackageName())!=0){
    navigationView = (NavigationView) findViewById(R.id.nav_view);
}

但是我仍然遇到相同的错误:

enter image description here

如果存在的话,我该如何写条件告诉Android Studio我要使用此资源?

2 个答案:

答案 0 :(得分:1)

尝试使用<button (click)="$event.stopPropagation();onButtonClick()">Button</button> 返回的值,这样就不需要访问生成的R文件:

getIdentifier

将第二个参数从“布局”更改为“ id”。

我还可以看到,您正在尝试在if子句之后访问int navViewId = getResources().getIdentifier("nav_view", "id", getPackageName()); if(navViewId != 0){ navigationView = (NavigationView) findViewById(navViewId); } ,因此下一个问题将是空指针异常,因此也应注意这一点。

答案 1 :(得分:1)

由于某种原因,直到现在我还不能修复它,我发现了一种更简便的方法来检查视图是否存在:

navigationView=findViewById(R.id.nav_view);
if(navigationView!=null){
    // do something
}

我在这里找到了此解决方案:https://stackoverflow.com/a/20432875/2966583


已编辑

以前的解决方案是在findViewById行的Android 5.1设备上使NullPointerException消息崩溃。

我将尝试添加vilpe89答案并以这种方式混合两个答案:

    int navViewId = getResources().getIdentifier("nav_view", "id", getPackageName());
    if(navViewId != 0){
        navigationView = findViewById(R.id.nav_view);
        if(navigationView != null){
            // do something
        }
    }

(此答案正在开发中……)