我已经在couple places中读到了三星设备上的EditText
无法打开拼写检查...所以它必须是真的,对吧?如果是这样,可能还有其他设备也无法进行拼写检查,例如我妻子刚刚从Verizon购买的LG VK700平板电脑(不要问)。
有没有办法以编程方式检测设备是否可以进行拼写检查?我想要一个用户可以打开或关闭它的选项,但是如果无法启用则不行。我希望这个选项变灰了。
(谷歌搜索programmatically determine whether android device can spellcheck
出现this,这看起来很有趣,但我无法证明大部分用户可能会关闭或忽略的工作(学习速度慢,这里)因为标记的单词只出现在与用户的“单词模式”匹配的单词列表中(例如,p?tt??n
),用于解决单词拼图。)
答案 0 :(得分:4)
根据Android Spell Checker Framework documentation,拼写检查服务应作为服务在应用的清单中公开,并带有特定的意图过滤器和元数据标记:
<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>
合理地说,我们应该能够通过尝试解决匹配的意图来检测是否安装了这样的服务。
我没有三星设备来测试“未找到”的情况,但我认为这应该有效:
TextView tv = new TextView(this);
PackageManager pm = getPackageManager();
Intent spell = new Intent(SpellCheckerService.SERVICE_INTERFACE);
ResolveInfo info = pm.resolveService(spell, 0);
if (info == null) {
tv.setText("no spell checker found");
} else {
tv.setText("found spell checker " + info.serviceInfo.name + " in package " + info.serviceInfo.packageName);
}
无论我在“设置”中启用还是禁用拼写检查,我的Moto G(2013)都说:。
这与香草AOSP键盘相同。我认为有问题的三星手机用自己的键盘替换了这个包,而没有更换拼写检查服务?
请注意,即使您检测到匹配服务的存在,激活它的实际设置也可能因设备而异...
答案 1 :(得分:1)
此处有Java
代码管理Preferences
以使Spellchecker
选项变灰,具体取决于用户的设备是否内置了该选项。
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
SettingsFragment.java
:
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
的补充:
<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"
/>
答案 2 :(得分:0)
要查看 IF 设备有内置拼写检查程序,请使用此xml
:
<spell-checker xmlns:android="http://schemas.android.com/apk/res/android"
android:label="spellchecker_name"
android:settingsActivity="com.example.SpellCheckerSettingsActivity">
</spell-checker>
(我想这些要求包括实际有文件进行拼写检查,因为那不是我的目标,在上面的结束标记之前删除上面提供的链接上xml
的以下行有道理:
<subtype
android:label="@string/subtype_generic"
android:subtypeLocale="en”
/>
<subtype
android:label="@string/subtype_generic"
android:subtypeLocale="fr”
/>
要提供拼写检查程序,还有很多工作要做。我:不感兴趣。 )