android - 安卓应用如何在整个应用运行期间都禁止弹出输入法面板?

浏览:55日期:2022-11-09

问题描述

最近有个项目是没有触摸的,外接的16键硬件键盘,但EditText在获取焦点时还是会弹出输入法。不想对每个EditText都设置监听处理。有没有更优雅的方法能让程序在运行期间都不会弹出输入法?最好是只要配置一下AndroidManifest.xml或者在Application里面运行一段代码。

问题解答

回答1:

你的AndroidManifest.xml中使用的全局主题样式应该是这样的:

<applicationandroid:allowBackup='true'android:icon='@mipmap/ic_launcher'android:label='@string/app_name'android:supportsRtl='true'android:theme='@style/AppTheme'>//使用的是AppTheme主题样式

那么你需要做的是,在 AppTheme中设置 EditText样式,完整的styles.xml如下:

<!-- Base application theme. --> <style name='AppTheme' parent='Theme.AppCompat.Light.DarkActionBar'><!-- Customize your theme here. --><item name='colorPrimary'>@color/colorPrimary</item><item name='colorPrimaryDark'>@color/colorPrimaryDark</item><item name='colorAccent'>@color/colorAccent</item><item name='editTextStyle'>@style/NoFocusableEditText</item> </style> <style name='NoFocusableEditText' parent='Widget.AppCompat.EditText'><item name='android:focusable'>false</item>//没有焦点就不会弹出了 </style>

这样整个 App的EditText都设置好了.

/-----------------------由于题主补充了根据题的描述,我更新了如下答案------------------------/在你的Activity的onCreate函数中添加如下代码即可完全禁用软键盘:

getWindow().setFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM,WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);

所以,你想全局生效的话,可以写一个基类,例如:

public abstract class BaseNoIMActivity extends AppCompatActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);getWindow().setFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM,WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);onCreateStarted(savedInstanceState); } protected abstract void onCreateStarted(@Nullable Bundle savedInstanceState);}

然后任意个Activity都继承它,如果你的项目已经有基类,那么把上面的代码插入到基类中即可,demo示例:

public class TestActivity extends BaseNoIMActivity {//继承基类 @Override protected void onCreateStarted(@Nullable Bundle savedInstanceState) {setContentView(R.layout.activity_test);Log.e('test','TestActivity is started'); }}

相关文章: