15

由于以下错误,我无法在我的项目中插入 Switch:

查看需要 API 级别 14(当前最低为 8):

但是在我的项目属性中,我使用的是 Platform 4.1 和 API Level 16。那么有什么问题吗?

4

6 回答 6

74

Google IO 2012 上有一个很好的讲座(从幻灯片 32 开始)

下面是一个详细的例子:

通过将其放置在 /res/layout-v14 中,为 ICS+ 版本创建一个单独的布局 XML 文件。生成的文件结构将如下所示:

res/layout
- mainlayout.xml
- compound_button.xml
res/layout-v14
- compound_button.xml

然后,当您的应用在 v14 或更高版本上运行时,Android 将在 layout-v14 目录中查找资源。

在 mainlayout.xml 中放置一个包含,它将在应用程序运行时拉入相关的 Compound_button.xml:

<include layout="@layout/compound_button" />

对于 4.0 之前的布局,我们需要一个复选框,因此创建 /layout/compound_button.xml 作为合并,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" >

    <CheckBox
        android:id="@+id/enabled"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Enable" />

</merge>

然后对于 4.0+ 布局,我们需要一个开关,因此创建 /layout-v14/compound_button.xml 作为合并,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" >

    <Switch
        android:id="@+id/enabled"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Enable"
        tools:ignore="NewApi" />

</merge>

当然,一定要适当地设置你的最小值和目标:

<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="14" />
于 2012-10-15T18:50:12.307 回答
5

在您的 AndroidManifest.xml 文件中查找此内容:

<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="16"/>

将 minSdkVersion 更改为 14。

于 2012-07-11T14:36:39.347 回答
3

Switch 需要 API 14,旧版本请使用 SwithCompat:

<android.support.v7.widget.SwitchCompat
android:id="@+id/switch_compat"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:checked="true"
android:textOff="OFF"
android:textOn="ON"
app:showText="false"
android:focusable="false"
android:focusableInTouchMode="false"/>

在 setOnCheckedChangeListener 上:

witchCompat switchCompat = (SwitchCompat)convertView.findViewById(R.id.switch_compat);
    switchCompat.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (isChecked) {
                textView.setText("check");
            } else {
                textView.setText("unCheck");
            }
        }
    });

我希望能帮助你。

于 2016-05-23T08:53:37.800 回答
1

android:minSdkVersion设置为 8。这意味着您的应用程序将在 API-8 (2.2.1) 及更高版本上运行,但由于 Switch 不可用,它会崩溃

于 2012-07-11T14:37:30.607 回答
1

更好的解决方案是在 layouts 文件夹和 layouts-v14 文件夹中有两个不同的 xml 布局,名称和代码相同。在 layouts 中它的 toggleButton/checkboxes 和在 layouts-v14 中它的 switch 和动态检查 api 版本并膨胀相应的布局。

于 2013-03-19T07:03:34.183 回答
0

看看有两种方法可以首先解决您的问题,要么将 minSdkVersion <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="16"/>从 8 更改为 14,要么在 layout-v14 中定义另一个包含 Switch 的布局,您可以在 res 目录中手动创建此文件夹

于 2013-11-23T17:38:02.243 回答