Maison > Questions et réponses > le corps du texte
最近有个项目是没有触摸的,外接的16键硬件键盘,但EditText在获取焦点时还是会弹出输入法。
不想对每个EditText都设置监听处理。有没有更优雅的方法能让程序在运行期间都不会弹出输入法?最好是只要配置一下AndroidManifest.xml或者在Application里面运行一段代码。
伊谢尔伦2017-04-18 09:09:34
Le style de thème global utilisé dans votre AndroidManifest.xml
devrait ressembler à ceci :
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">//使用的是AppTheme主题样式
Ensuite, ce que vous devez faire est de définir le style AppTheme
dans EditText
. Le fichier styles.xml complet est le suivant :
<!-- 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>
De cette façon, le EditText de l'ensemble de l'application est défini.
/----------------------Depuis que l'auteur de la question a ajouté une description basée sur la question, j'ai mis à jour la réponse comme suit------ -- -----------------/
Ajoutez le code suivant dans la fonction onCreate
de votre activité pour désactiver complètement le clavier logiciel :
getWindow().setFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM,
WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
Donc, si vous souhaitez que cela prenne effet globalement, vous pouvez écrire une classe de base, par exemple :
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);
}
Ensuite, toute activité en hérite. Si votre projet a déjà une classe de base, insérez simplement le code ci-dessus dans l'exemple de classe de base :
.public class TestActivity extends BaseNoIMActivity {//继承基类
@Override
protected void onCreateStarted(@Nullable Bundle savedInstanceState) {
setContentView(R.layout.activity_test);
Log.e("test","TestActivity is started");
}
}