Android Oには、フィールドで 自動入力 をサポートする機能があります。特定のアプリケーションで無効にする方法はありますか。つまり、アプリケーションが自動入力サービスを使用しないように強制します。
出来ますか ?
アクティビティ全体の自動入力をブロックするには、アクティビティのonCreate()でこれを使用します。
getWindow()
.getDecorView()
.setImportantForAutofill(View.IMPORTANT_FOR_AUTOFILL_NO_EXCLUDE_DESCENDANTS);
これより良い方法はありますか?
出来ますか ?
私が知っていることではありません。確かに、何も文書化されていません。
これより良い方法はありますか?
私が知っていることではありません。
現在、自動入力機能はView specific。であるため、アプリケーション全体の自動入力を無効にする直接的な方法はありません。
それでもこの方法を試して、BaseActivity everywhereを呼び出すことができます。
public class BaseActivity extends AppCompatActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
disableAutofill();
}
@TargetApi(Build.VERSION_CODES.O)
private void disableAutofill() {
getWindow().getDecorView().setImportantForAutofill(View.IMPORTANT_FOR_AUTOFILL_NO_EXCLUDE_DESCENDANTS);
}
}
この方法でリクエストの自動入力を強制することもできます。
public void forceAutofill() {
AutofillManager afm = context.getSystemService(AutofillManager.class);
if (afm != null) {
afm.requestAutofill();
}
}
注:現時点では、自動入力機能はAPI 26 Android Oreo 8.でのみ利用可能です
お役に立てれば!
私は受け入れられた答えが間違っていると信じています:
extends theAndroid.support.v7.widget.AppCompatEditTextである独自のクラスがあり、上書きしただけです次の値を持つ次のメソッド:
@Override
public int getAutofillType() {
return AUTOFILL_TYPE_NONE;
}
android:importantForAutofill = "no"でさえ、他のソリューションは機能しませんでした。
getAutofillType()はViewクラスに由来するため、TextInputEditTextなどの他のすべてのクラスでも機能するはずです!
私もこれに遭遇しました。この問題は、TextInputLayout内にネストされたEditTextにヒントテキストを設定することによって発生したことが判明しています。
26.0.0 Beta 2リリースノートで掘り下げてこのナゲットを見つけました。 2017年6月のAndoridサポートリリースノート
TextInputLayoutはonProvideAutofillStructure()にヒントを設定する必要があります
そこで、ネストされたEditTextの代わりにTextInputLayoutにヒントを設定してみました。
これにより、クラッシュの問題が解決しました。例:
<Android.support.design.widget.TextInputLayout
Android:id="@+id/textInputLayout"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:hint="Some Hint Text"
Android.support.design:hintAnimationEnabled="true"
Android.support.design:hintEnabled="true"
Android.support.design:layout_marginTop="16dp">
<Android.support.design.widget.TextInputEditText
Android:id="@+id/editText"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"/>
</Android.support.design.widget.TextInputLayout>
修正が必要なバグのようです: https://issuetracker.google.com/issues/67675432
当面の回避策は、プロジェクト全体でオートフィル機能を無効にすることです。 values-v26/styles.xml
ファイルに次のスタイルを追加するか、EditTextビューに特定のスタイルを使用している場合はBaseEditTextStyleを編集できます。
<style name="App_EditTextStyle" parent="@Android:style/Widget.EditText">
<item name="Android:importantForAutofill">noExcludeDescendants</item>
</style>
values-v26/themes.xml
ファイルでは、アプリで使用しているデフォルトのテーマに、次のようにeditTextStyle
とAndroid:editTextStyle
の項目を追加するだけです。
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
...
<item name="Android:editTextStyle">@style/App_EditTextStyle</item>
<item name="editTextStyle">@style/App_EditTextStyle</item>
</style>
このようにして、レイアウトファイルやアクティビティを変更せずに、EditTextにallにこの変更を適用できます(後でバグが発生したときに簡単に削除できます)固定されています)。
カスタムEditTextスタイルを作成し、Android:importantForAutofill
をno
に設定します。
<style name="EditTextStyleWithoutAutoFill" parent="Widget.AppCompat.EditText">
<item name="Android:importantForAutofill">no</item>
</style>
次に、アクティビティテーマで、このスタイルをeditTextStyleに設定します。
<item name="Android:editTextStyle">@style/EditTextStyleWithoutAutoFill</item>
EditText属性にAndroid:importantForAutofill="no"
を追加します。これは一時的な修正であり、API 26以降にのみ適用されます
Google issue tracker を参照して、修正されました。
これはAndroid 8.1で修正されました
問題が解決しない場合は、 Google issue tracker で報告してください。調査のために再度開きます。