1

生体認証(指紋)を使ったアプリを作ろうとしていますが、マイナスボタンで困っています。ボタンは機能しますが、何らかの理由で完全に見えなくなります。 アプリではこのように表示されます

ボタンを押すと、このように表示されます。ご覧のとおり、存在しますが、表示する方法がわかりません

Java で BiometricPrompt と BiometricManager を使用しています。

編集:私のものではない他の電話ではボタンが正常に表示されているようです。Xiaomi Redmi Note 8を使用しています。

ただし、これは私が使用しているコードです:

private void initViews()
{
    biometricManager = BiometricManager.from(this);
    passwordEditText=findViewById(R.id.passwordText);
    loginButton=findViewById(R.id.loginButton);
    switch (biometricManager.canAuthenticate()) {
        case BiometricManager.BIOMETRIC_SUCCESS:
            Log.d("MY_APP_TAG", "App can authenticate using biometrics.");
            break;
        case BiometricManager.BIOMETRIC_ERROR_NO_HARDWARE:
            Log.e("MY_APP_TAG", "No biometric features available on this device.");
            break;
        case BiometricManager.BIOMETRIC_ERROR_HW_UNAVAILABLE:
            Log.e("MY_APP_TAG", "Biometric features are currently unavailable.");
            break;
        case BiometricManager.BIOMETRIC_ERROR_NONE_ENROLLED:
            Log.e("MY_APP_TAG", "The user hasn't associated " +
                    "any biometric credentials with their account.");
            break;
    }
    executor = ContextCompat.getMainExecutor(this);
    biometricPrompt = new BiometricPrompt(EnterYourPassActivity.this,
            executor, new BiometricPrompt.AuthenticationCallback() {
        @Override
        public void onAuthenticationError(int errorCode,
                                          @NonNull CharSequence errString) {
            super.onAuthenticationError(errorCode, errString);
            if(errString.equals("Use account password"))
            {
                passwordEditText.setVisibility(View.VISIBLE);
            }
            else
            {
                Log.d("MY_APP_TAG",""+errString);
                Toast.makeText(getApplicationContext(),
                        "Authentication error: " + errString, Toast.LENGTH_SHORT)
                        .show();
            }
        }

        @Override
        public void onAuthenticationSucceeded(
                @NonNull BiometricPrompt.AuthenticationResult result) {
            super.onAuthenticationSucceeded(result);
            Toast.makeText(getApplicationContext(),
                    "Authentication succeeded!", Toast.LENGTH_SHORT).show();
            Intent seeingFiles = new Intent(EnterYourPassActivity.this, SeeingFilesActivity.class);
            startActivity(seeingFiles);
        }

        @Override
        public void onAuthenticationFailed() {
            super.onAuthenticationFailed();
            Toast.makeText(getApplicationContext(), "Authentication failed",
                    Toast.LENGTH_SHORT)
                    .show();
        }
    });

    promptInfo = new BiometricPrompt.PromptInfo.Builder()
            .setTitle("Biometric login for my app")
            .setSubtitle("Log in using your biometric credential")
            .setNegativeButtonText("Use account password")
            .build();

    loginButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            biometricPrompt.authenticate(promptInfo);
        }
    });
}
4

1 に答える 1

0

この方法で、negativeButton のテキストを変更してみてください:
重要- 文字列をリソースに入れます:

    <string name="negative_button_text"><![CDATA[<font color=\'#48a134\'>Your text at given color</font>]]></string>

ご覧のとおり、テキストの色を 16 進数で設定できます。次に、次のように、negativeText を BiometricPrompt に入れます。

val negativeButtonText = getString(R.string.negative_button_text)
val promptInfo = BiometricPrompt.PromptInfo.Builder()
    .setTitle("title")
    .setDescription("description")
    .setNegativeButtonText(fromHtml(negativeButtonText))
    .build()

fun fromHtml(html: String): Spanned {
    return HtmlCompat.fromHtml(html, HtmlCompat.FROM_HTML_MODE_LEGACY)
}

与えられた例では、 negativeText は緑色で、プロンプトはTHISのように見えます。

于 2021-10-02T21:52:24.767 に答える