Android Studio 有 2 个布局 activity 文件用于相同的 activity。有必要吗?如何为所有较新的 SDK 版本保留 1 个文件?

Android Studio has 2 layout activity files for the same activity. Is it necessary? How do I keep 1 file for all newer SDK verions?

在我的项目中,我有一个名为 "marquee" 的 activity。然而,出于某种原因,在 "layout" 的子文件夹中有 2 个文件与 activity 相关联。我不记得成功了。它为什么在这里?我一直在浪费时间更改 "activity_marquee.xml" 中的代码,但没有任何更改,因为我的 phone 只会使用以某种方式创建的 "activity_marquee.xml (v26)"。如何确保所有 phone 使用相同的 "activity_marquee.xml"?我将如何删除不必要的?如果我删除其中一个,则同时删除两个,甚至包含这 2 个活动的文件夹也会被删除。

我尝试将我的 minSdkVersion 和 targetSdkVersion(在 build.gradle 中)更改为不同的值,希望只保留 1 activity,但 (v26) 仍然存在。我也尝试添加到 AndroidManifest.xml 并更改最小、目标和最大 sdk 版本,但两个文件都保留了。

https://i.imgur.com/qrPoPHv.png(link 图片,因为我还没有 post 它的 10 个声望)

build.gradle:

android {
compileSdkVersion 28
defaultConfig {
    applicationId "(removed)"
    minSdkVersion 19
    targetSdkVersion 28
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}

}

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>

<uses-permission android:name="android.permission.INTERNET"></uses-permission>

<application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>

            <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
    </activity>
    <activity android:name=".MarqueeActivity">
    </activity>
</application>

我只想为每个 activity 使用 1 个布局文件,并让它在所有更高级别的 android API 上工作。我在 2 周前根据教程制作了另一个应用程序,我不必更改 2 个文件中的布局。如果可能的话,我也想在这里。

你需要理解resource qualifiers的概念。 您可以为不同的设备设置提供不同的资源。这最常用于不同的图像分辨率或翻译,例如通过 "values" 和 "values-de"(德语的 de)文件夹都包含一个 strings.xml 文件。您的应用程序将始终选择与您的 phone 配置相匹配的最具体的资源。假设我将 phone 设置为德语,应用程序将在 values-de 文件夹中查找资源。否则它将回退到默认值文件夹。

如果您的两个布局文件相同,您只需将其从 layout-v26 文件夹中删除即可。如果该文件夹不包含任何其他文件,您可以将其完全删除。

If I delete either one, both of them, and even the folder that contains the 2 activities gets removed.

实际上,这两个文件在不同的文件夹中。但是,如果您在项目资源管理器中选择了默认 "Android" 视图,Android Studio 会将它们显示为就好像它们在同一个视图中一样。如果将视图切换到 "Project",您会看到它们位于不同的文件夹 "res/layout" 和 "res/layout-v26".