android - 安卓应用如何在整个应用运行期间都禁止弹出输入法面板?
PHPz
PHPz 2017-04-18 09:07:34
[Android讨论组]

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

PHPz
PHPz

学习是最好的投资!

全部回复(1)
伊谢尔伦

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

<application
        android: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");
    }
}
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号