是否有任何方法可以通过编程确定android设备是否内置拼写检查器?
我在一篇文章中读到,三星设备上的是否有任何方法可以通过编程确定android设备是否内置拼写检查器?,android,spell-checking,Android,Spell Checking,我在一篇文章中读到,三星设备上的EditText无法启用拼写检查。。。那一定是真的,对吧?如果是这样的话,可能还有其他设备也不能进行拼写检查,比如我妻子刚从Verizon(不问)买的LG VK700平板电脑 是否有任何方法可以通过编程检测设备是否可以进行拼写检查?我希望用户可以选择打开或关闭设备,但如果无法打开,则不能。我想让选项变成灰色 (谷歌以编程的方式确定android设备是否可以进行拼写检查,这看起来很有趣,但我不能为大多数用户可能会关闭或忽略的东西做大量工作(这里是慢速学习者),因为标
EditText
无法启用拼写检查。。。那一定是真的,对吧?如果是这样的话,可能还有其他设备也不能进行拼写检查,比如我妻子刚从Verizon(不问)买的LG VK700平板电脑
是否有任何方法可以通过编程检测设备是否可以进行拼写检查?我希望用户可以选择打开或关闭设备,但如果无法打开,则不能。我想让选项变成灰色
(谷歌以编程的方式确定android设备是否可以进行拼写检查,这看起来很有趣,但我不能为大多数用户可能会关闭或忽略的东西做大量工作(这里是慢速学习者),因为标记的单词只会出现在与用户“单词模式”匹配的单词列表中(例如,p?tt??n
)用于解决字谜。)根据,拼写检查服务应在应用程序清单中作为服务公开,并带有特定的意图过滤器和元数据标记:
<service
android:label="@string/app_name"
android:name=".SampleSpellCheckerService"
android:permission="android.permission.BIND_TEXT_SERVICE" >
<intent-filter >
<action android:name="android.service.textservice.SpellCheckerService" />
</intent-filter>
<meta-data
android:name="android.view.textservice.scs"
android:resource="@xml/spellchecker" />
</service>
不管我是在设置中启用还是禁用拼写检查,我的Moto G(2013)说:
这是与香草AOSP键盘相同的软件包。我假设有问题的三星手机已经用自己的键盘替换了这个软件包,而没有替换拼写检查服务
请注意,即使检测到存在匹配的服务,激活该服务的实际设置也可能因设备而异…要查看如果设备内置拼写检查器,请使用此xml
:
<spell-checker xmlns:android="http://schemas.android.com/apk/res/android"
android:label="spellchecker_name"
android:settingsActivity="com.example.SpellCheckerSettingsActivity">
</spell-checker>
<CheckBoxPreference
android:key="pref_spell_check"
android:defaultValue="false"
android:persistent="true"
android:enabled="false"
android:title="Spell checker"
android:summary="Allow your phone's built-in spell checker to underline questionable matches"
/>
要提供拼写检查,还有很多工作要做。我:不感兴趣。
)以下是Java
代码,用于管理首选项
以灰显拼写检查器
选项,具体取决于用户的设备是否内置该选项
SettingsActivity.java
:
public class SettingsActivity extends Activity
{
public static boolean blnSpellcheckerPresent; // slight hack
@Override protected void onCreate(Bundle _savedInstanceState) {
super.onCreate(_savedInstanceState);
// Inserted Snild's code here:
PackageManager pm = getPackageManager();
Intent spell = new Intent(SpellCheckerService.SERVICE_INTERFACE);
ResolveInfo info = pm.resolveService(spell, 0);
blnSpellcheckerPresent = (info != null);
// end insert
setContentView(R.layout.activity_settings);
}
} // end class SettingsActivity
public class SettingsFragment extends PreferenceFragment
{
@Override public void onCreate(Bundle _savedInstanceState){
super. onCreate(_savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
Preference spellchecker = getPreferenceManager().findPreference("pref_spell_check");
spellchecker.setEnabled(SettingsActivity.blnSpellcheckerPresent);
}
} // end class SettingsFragment
设置片段.java
:
public class SettingsActivity extends Activity
{
public static boolean blnSpellcheckerPresent; // slight hack
@Override protected void onCreate(Bundle _savedInstanceState) {
super.onCreate(_savedInstanceState);
// Inserted Snild's code here:
PackageManager pm = getPackageManager();
Intent spell = new Intent(SpellCheckerService.SERVICE_INTERFACE);
ResolveInfo info = pm.resolveService(spell, 0);
blnSpellcheckerPresent = (info != null);
// end insert
setContentView(R.layout.activity_settings);
}
} // end class SettingsActivity
public class SettingsFragment extends PreferenceFragment
{
@Override public void onCreate(Bundle _savedInstanceState){
super. onCreate(_savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
Preference spellchecker = getPreferenceManager().findPreference("pref_spell_check");
spellchecker.setEnabled(SettingsActivity.blnSpellcheckerPresent);
}
} // end class SettingsFragment
下面是对preferences.xml的补充:
<spell-checker xmlns:android="http://schemas.android.com/apk/res/android"
android:label="spellchecker_name"
android:settingsActivity="com.example.SpellCheckerSettingsActivity">
</spell-checker>
<CheckBoxPreference
android:key="pref_spell_check"
android:defaultValue="false"
android:persistent="true"
android:enabled="false"
android:title="Spell checker"
android:summary="Allow your phone's built-in spell checker to underline questionable matches"
/>
--谢谢,但是需要一个xml
文件spellchecker.xml
,我要看看是否可以把它放在一起。至少这是Gradle
所说的:Error:(36,39)没有找到与给定名称匹配的资源(在“资源”处,值为“@xml/spellchecker”)。
或者,如果您已经找到了,请修改。在你的链接中找到的xml
文件有错误,我不知道如何修复:但是如果我删除了两个子类型
,那么你的Java
代码告诉我我所知道的:LG
没有拼写检查,而Verizon
有。谢谢!!该xml是拼写检查服务(提供拼写检查功能)必须定义的内容。这是解释我当时发布的Java代码为何/如何工作的一部分(通过检测系统上是否有安装了此类服务的应用程序)。但是链接处的xml
有错误。然后呢?不能忽视;格拉德尔抱怨。无论什么我另一个答案中的四行似乎检测正确。