2016-08-11 62 views
1

我必須使用Typeface.createFromFile()使用用戶的memopry裏面的字體的位置視圖的字體樣式,所以字體文件將由用戶來選擇,然後用於更改字體的觀點。我不能使用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 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_STORAGEWRITE_EXTERNAL_STORAGE許可訪問此位置,而這又需要你,如果你targetSdkVersion設置爲23或更高,以實現runtime permissions

+1

它不再工作,我修改它 – user3351571

+0

@ user3351571:[這是一個示例應用程序](https://github.com/commonsguy/cw-omnibus/tree/master/Fonts/FontSampler),演示使用自定義字體。如果您正在崩潰,請檢查您的Java堆棧跟蹤以獲取指示信息。如果你沒有崩潰,但字體似乎沒有改變,請嘗試使用不同的字體,就好像Android無法正確解碼字體一樣,它似乎只是悄然失敗,而不是拋出異常。 – CommonsWare

+0

此代碼無法正常工作,我在同一位置複製同名文件,但它不起作用! 如果(font.exists()){ TV =(TextView的)findViewById(R.id.file); face = Typeface.createFromFile(font); tv.setTypeface(面部); } 否則{ findViewById(R.id.filerow).setVisibility(View.GONE); }} } – user3351571