2012-04-18 8 views
-5

誰かがこのコードを私に説明しようとすることができますか、私は本当にそれを理解していないし、Web上のどこにも説明できないようです。私は 'DummiesのためのAndroid Development'のコピーを持ってきました。それは本当に私を助けませんでした。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

+1

おそらく基本的なJavaの本が必要でしょう。あなたは特に何を得ていないのですか? – kcoppock

+0

私は他の行もあると思うが、これについては考えていない。 書体lcdFont = Typeface.createFromAsset(getAssets()、 "fonts/lcd2mono.ttf"); 私はなぜtxtMineCountを別のtextView(レイアウトXmlで定義されている)に設定するのかもわかりません。私はちょうどxmlのテキストビューに.ttfを直接インポートできると思ったでしょうか? – Dave

答えて

4
private TextView txtMineCount; 
private TextView txtTimer; 

あなたがそれらを割り当てる必要がありそう...これが。TextViewへの参照を保持することができ、2つのローカル変数を宣言最初は彼らが何を指していません。

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

ここでは、2つの変数を割り当てることができます。私たちは、のメソッドを呼び出しますIDによって作成されたテキストベースのウィジェットの中でルックアップを行うためのフレームワークです。重要なことに、これらのウィジェットはここでは作成していません。それらに名前を付けるために使用するいくつかのID定数に対応する、adyに割り当てられたオブジェクトインスタンス。

View.findViewById()nullを返すことができるので、これらの検索が一般的な場合に成功するとは必ずしも「安全」であるとは限りません。しかし、このコードを書いた人は、その特定のIDを持つコードの他の場所に実際に作成されたTextViewオブジェクトがあると仮定しています。

(彼らは、その後だけ例外が発生しますtxtMineCountまたはtxtTimer上の書体を設定しようとし、そのことについて間違っている場合は...)

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

Androidが同梱さいくつかのデフォルトのフォントを持っていますシステム。しかし、このプログラムでは、アプリケーションの資産のfontサブディレクトリに埋め込まれているTrueType Font File(基本的に、アプリケーションバンドル内を移動する一連のファイル)を利用したいと考えています。これにより、そのファイルからTextViewに適用するのに適したTypefaceオブジェクトが作成されます。

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

これは、2つのTextViewで使用される書体を上記のフォントに設定するだけです。


中間変数なしで同等の効果が得られることに注意してください。このコードは、あなたが投稿したものと同じことを行う必要があります。

((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コードは、このように書くときに同じパラメータで2回実行されます。

+1

優れた答え。 :) – kcoppock

+0

@kcoppock私のプログラムは難しい質問で満ちているので、簡単なものに答えるのが楽しい休憩です! – HostileFork

2

は、私はあなたの質問が何であるかわからない:txtMineCountとtxtTimer:

  1. はあなたの.xmlファイルのレイアウトにビューのカップルを定義しました。

  2. 実行時にfindViewById()を使用してTextviewインスタンスを取得しています。

  3. 実行時に両方のビューで「書体」プロパティを設定しています。

0

私は掃除機のクローンのように見えます。それは何やっていることは(特定のフォント(この場合は、液晶の事)でテキストをdislpayingため、おそらく何かを「のTextView」のインスタンスを作成しています。それとも、コードの各行はありません正確に把握する必要がありましたか?

関連する問題