2016-08-11 3 views
1

Я должен использовать Typeface.createFromFile(), чтобы использовать местоположение шрифта внутри памятки пользователя, поэтому файл шрифта будет выбран пользователем, а затем использован для изменения шрифта зрения. Я не могу использовать Typeface.createFromAsset(getAssets(),"FileAssets");, потому что файл шрифта является динамическим и может быть выбран пользователем. Код ниже - пример кода для изменения стиля шрифта textview, но он не работает. Как я могу справиться с этим?Невозможно изменить стиль шрифта представления с помощью Typeface.createFromFile()

public class MainActivity extends AppCompatActivity { 

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     TextView tv = (TextView) findViewById(R.id.textview); 
     File file = new File(Environment.getExternalStorageDirectory()+"/testfont/","font1.ttf"); 
     if (file.exists()) { 
      try { 
       Typeface tb = Typeface.createFromFile(file.getPath()); 
       tv.setTypeface(tb); 
      } 
      catch (RuntimeException e) { 
       Log.d("TED", "Unable to create a font from " + file.getName()); 
      } 

     } 
    } 
} 
+0

Так что, думая, вы можете получить абсолютный путь шрифта, когда пользователь сначала его выбирает и где-то хранит, как в настройках или базе данных; то вам не придется беспокоиться о проблемах с контентом – Eenvincible

+0

Я изменил его на это, но все равно он не работает Файл file = new File (Environment.getExternalStorageDirectory() + "/ testfont /", "font.ttf")) ; – user3351571

ответ

1
File file = new File("sdcard/testfont.font.ttf"); 

Это не правильный путь. Используйте соответствующие методы для создания пути к вашему файлу шрифтов по адресу external storage.

Если, в то время как вы экспериментируете с Android, вы кладете шрифт как testfont.font.ttf файл в корневом каталоге внешнего запоминающего устройства, используйте:

File file = new File(Environment.getExternalStorageDirectory(), "testfont.font.ttf")); 

Обратите внимание, что вам нужно будет держать разрешение на READ_EXTERNAL_STORAGE или WRITE_EXTERNAL_STORAGE для доступа к этому местоположению, и в свою очередь вам потребуется реализовать runtime permissions, если ваш targetSdkVersion установлен в 23 или выше.

+1

он больше не работает, я его изменяю – user3351571

+0

@ user3351571: [Вот пример приложения] (https://github.com/commonsguy/cw-omnibus/tree/master/Fonts/FontSampler), который демонстрирует использование пользовательских шрифтов. Если вы терпите крах, проверьте инструкцию по трассировке Java. Если вы не рушитесь, но шрифт, похоже, не меняется, попробуйте использовать другой шрифт, как если бы Android не смог правильно декодировать шрифт, он, похоже, просто терпит неудачу, вместо того чтобы бросать исключение. – CommonsWare

+0

этот код не работает, я копирую одноименный файл в том же месте, но он не работает! if (font.exists()) { tv = (TextView) findViewById (R.id.file); face = Typeface.createFromFile (font); tv.setTypeface (лицо); } else { findViewById (R.id.filerow) .setVisibility (View.GONE); } } } – user3351571

Смежные вопросы