Почему negativeButton «невидимый»? - PullRequest
0 голосов
/ 19 июня 2020

Я пытаюсь создать приложение с аутентификацией biometri c (отпечаток пальца), и у меня проблемы с отрицательной кнопкой. Кнопка работает, но почему-то полностью не видна. Вот как приложение показывает

И так оно видит, когда вы нажимаете кнопку. Как видите, он существует, но я не знаю, как сделать его видимым

Я использую BiometricPrompt и BiometricManager в Java.

Редактировать: Кажется что кнопка отображается нормально на любом другом телефоне, который не мой. Я использую 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);
        }
    });
}
...