cari

Rumah  >  Soal Jawab  >  teks badan

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

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

PHPzPHPz2893 hari yang lalu767

membalas semua(1)saya akan balas

  • 伊谢尔伦

    伊谢尔伦2017-04-18 09:09:34

    Gaya tema global yang digunakan dalam AndroidManifest.xml anda sepatutnya kelihatan seperti ini:

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

    Kemudian apa yang anda perlu lakukan ialah menetapkan gaya AppTheme dalam EditText gaya lengkap.xml adalah seperti berikut:

        <!-- 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>

    Dengan cara ini, EditTeks keseluruhan Apl ditetapkan.

    /----------------------Memandangkan penyoal menambah penerangan berdasarkan soalan, saya telah mengemas kini jawapan seperti berikut------- - -----------------/
    Tambah kod berikut dalam fungsi onCreate Aktiviti anda untuk melumpuhkan sepenuhnya papan kekunci lembut:

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

    Jadi, jika anda mahu ia berkuat kuasa secara global, anda boleh menulis kelas asas, contohnya:

    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);
    }

    Kemudian mana-mana Aktiviti mewarisinya Jika projek anda sudah mempunyai kelas asas, hanya masukkan kod di atas ke dalam contoh Demo kelas:

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

    balas
    0
  • Batalbalas