由于以下错误,我无法在我的项目中插入 Switch:
查看需要 API 级别 14(当前最低为 8):
但是在我的项目属性中,我使用的是 Platform 4.1 和 API Level 16。那么有什么问题吗?
由于以下错误,我无法在我的项目中插入 Switch:
查看需要 API 级别 14(当前最低为 8):
但是在我的项目属性中,我使用的是 Platform 4.1 和 API Level 16。那么有什么问题吗?
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" />
在您的 AndroidManifest.xml 文件中查找此内容:
<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="16"/>
将 minSdkVersion 更改为 14。
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");
}
}
});
我希望能帮助你。
您android:minSdkVersion
设置为 8。这意味着您的应用程序将在 API-8 (2.2.1) 及更高版本上运行,但由于 Switch 不可用,它会崩溃
更好的解决方案是在 layouts 文件夹和 layouts-v14 文件夹中有两个不同的 xml 布局,名称和代码相同。在 layouts 中它的 toggleButton/checkboxes 和在 layouts-v14 中它的 switch 和动态检查 api 版本并膨胀相应的布局。
看看有两种方法可以首先解决您的问题,要么将 minSdkVersion <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="16"/>
从 8 更改为 14,要么在 layout-v14 中定义另一个包含 Switch 的布局,您可以在 res 目录中手动创建此文件夹