【问题标题】:android.content.res.Resources$NotFoundException when using getFontandroid.content.res.Resources$NotFoundException 使用 getFont 时
【发布时间】:2021-07-03 16:26:56
【问题描述】:

我开发了一个基于 Firebase 的 android 应用程序。

应用程序中的一个按钮用于删除帐户。

删除帐户后,我会使用以下方法将用户返回到主要活动:

AuthUI.getInstance()
        .signOut( context )
        .addOnCompleteListener( task -> {
            Intent intent = new Intent( context, MainActivity.class );
            intent.setFlags( Intent.FLAG_ACTIVITY_CLEAR_TOP |
                    Intent.FLAG_ACTIVITY_CLEAR_TASK |
                    Intent.FLAG_ACTIVITY_NEW_TASK );
            context.startActivity( intent );
        } );

然后,当创建主活动时,其中的方法很少。 当用户第一次打开应用程序告诉他们应该打开 GPS 时,会使用一种称为 activateGPS 的方法。

private void activateGPS() {
    new GpsUtils( this ).turnGPSOn( isGPSEnable -> isGPS = isGPSEnable );

    if (!isGPS) {
        PopUps popUps = new PopUps();
        popUps.popSnack( getApplicationContext(), getWindow().getDecorView().findViewById( android.R.id.content ), getString( R.string.Location_Service ) );
    }
}

是什么导致了这个问题?

当我在模拟器上运行它时,一切似乎都正常。

谢谢 如果 GPS 关闭,则会显示一个小吃店。

问题是,我在日志中看到的是,当用户删除他们的帐户时,发生了以下错误:

Caused by android.content.res.Resources$NotFoundException
Font resource ID #0x7f090000 could not be retrieved.

androidx.core.content.res.ResourcesCompat.loadFont (ResourcesCompat.java:4)
androidx.core.content.res.ResourcesCompat.getFont (ResourcesCompat.java:19)
com.xx.yy.PopUps.popSnack (PopUps.java:4)
com.xx.yy.MainActivity.activateGPS (MainActivity.java:8)

PopUps.popSnack 构建如下,我从一个界面使用它:

public void popSnack(Context context, View view, String message) {
    Snackbar snackbar = Snackbar.make( view.findViewById( android.R.id.content ), message, Snackbar.LENGTH_SHORT );
    View sbView = snackbar.getView();
    sbView.setBackgroundColor( context.getResources().getColor( R.color.colorPrimaryDark ) );
    sbView.setElevation( 0f );

    TextView tv = (snackbar.getView()).findViewById( com.google.android.material.R.id.snackbar_text );
    Typeface font = ResourcesCompat.getFont( context, R.font.assistant );
    tv.setTypeface( font );
    tv.setTextSize( 12 );

    if (view.findViewById( R.id.et_Message ) != null) {
        snackbar.setAnchorView( R.id.et_Message );
    } else if (view.findViewById( R.id.bottom_navigation ) != null) {
        snackbar.setAnchorView( R.id.bottom_navigation );
    }
    snackbar.setDuration( 5000 );
    snackbar.show();
}

【问题讨论】:

    标签: java android snackbar


    【解决方案1】:

    根据您提到的错误,我认为您尝试访问的资源不可用。 请确保该文件在字体文件夹中。

       ResourcesCompat.getFont(context,R.font.assistant);
    

    上面的代码应该可以正常工作。

    【讨论】:

    • 但它如何识别哪种字体?我有不止一个...
    • getResources().getFont(R.font.assistant);
    • 只有API可用> 26. 低级怎么办?我的最小 SDK 是 21
    猜你喜欢
    • 2012-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-25
    相关资源
    最近更新 更多