2012-04-18 76 views
-5

有人可以嘗試爲我解釋這段代碼嗎?我不是很瞭解它,並且網絡上無處可以解釋它。我帶了一本'Android開發傻瓜'的副本,它並沒有真正幫助我。安卓系統 - 無法理解代碼

private TextView txtMineCount; 
private TextView txtTimer; 
txtMineCount = (TextView) findViewById(R.id.MineCount); 
txtTimer = (TextView) findViewById(R.id.Timer); 

// set font style for timer and mine count to LCD style 
Typeface lcdFont = Typeface.createFromAsset(getAssets(), 
    "fonts/lcd2mono.ttf"); 
txtMineCount.setTypeface(lcdFont); 
txtTimer.setTypeface(lcdFont); 

在此先感謝你們。

+0

你的問題是什麼?你不清楚哪部分是? – EboMike 2012-04-18 21:29:10

+1

你可能需要一本基本的Java書,真的。你沒有得到什麼? – kcoppock 2012-04-18 21:30:05

+0

我想我得到其他的線,但不知道這一個 字體lcdFont = Typeface.createFromAsset(getAssets(), 「fonts/lcd2mono.ttf」); 我也不太明白爲什麼我會將txtMineCount設置爲另一個textView(在layout Xml中定義)。我原以爲我可以直接導入.ttf直接在XML文本視圖...? – Dave 2012-04-18 21:43:44

回答

4
private TextView txtMineCount; 
private TextView txtTimer; 

該聲明可以保存到TextView引用兩個局部變量。起初,所以你必須給它們分配不指向任何東西...。

txtMineCount = (TextView) findViewById(R.id.MineCount); 
txtTimer = (TextView) findViewById(R.id.Timer); 

這裏我們給這兩個變量,我們稱之爲的方法這個框架在基於文本的小部件之間進行查找,這些小部件由ID創建,重要的是我們不在這裏創建這些小部件,我們只是找到了alre ady分配的對象實例,它們對應於我們用來命名它們的一些ID常量。

假設這些查找在一般情況下成功並不一定「安全」,因爲View.findViewById()可以返回null。但是編寫這段代碼的人認爲確實在代碼中的其他地方創建了具有這些特定ID的TextView對象。

(如果他們錯了,然後試圖設置字體上txtMineCounttxtTimer只會導致異常...)

// set font style for timer and mine count to LCD style 
Typeface lcdFont = Typeface.createFromAsset(getAssets(), 
    "fonts/lcd2mono.ttf"); 

Android有與船的一些默認字體系統。但是這個程序想要使用嵌入在應用程序資源的字體子目錄中的TrueType Font File(基本上是一束在應用程序包內部傳播的文件)。這會創建一個適用於將TextView應用於該文件的Typeface對象。

txtMineCount.setTypeface(lcdFont); 
txtTimer.setTypeface(lcdFont); 

這只是簡單地將兩個TextViews使用的字體設置爲上面的字體。


請注意,您可以在沒有中間變量的情況下獲得等效的效果。此代碼應該做同樣的事情,你什麼發佈:

((TextView)findViewById(R.id.MineCount)).setTypeface(
    Typeface.createFromAsset(getAssets(), "fonts/lcd2mono.ttf")); 

((TextView)findViewById(R.id.Timer)).setTypeface(
    Typeface.createFromAsset(getAssets(), "fonts/lcd2mono.ttf")); 

但它難以閱讀這種方式,並沒有保存在變量中間結果可以是中間結果多次最終計算。例如,當您以這種方式編寫代碼時,Typeface.createFromAsset代碼將使用相同的參數運行兩次。

+1

優秀的答案。 :) – kcoppock 2012-04-18 21:55:02

+0

@kcoppock我的程序充滿了難題,所以有時回答簡單的問題是一個愉快的休息! – HostileFork 2012-04-18 22:07:17

2

我不知道你的問題是什麼:txtMineCount和txtTimer:

  1. 你已經在你的.xml佈局定義的一對夫婦的意見。

  2. 您正在使用findViewById()在運行時檢索Textview實例。

  3. 您在運行時在兩個視圖中設置「字體」屬性。

0

在我看來像一個掃雷克隆。它在做什麼是創造「的TextView」(可能是一些對某個字體(在這種情況下dislpaying文本LCD的東西)的一個實例。還是你需要確切地知道什麼樣的每一行代碼呢?