-5

誰かが私のためにこのコードを説明してみてください、私はそれのどれも本当に理解しておらず、ウェブ上のどこにもそれを説明していないようです。「AndroidDevelopmentforDummies」のコピーを持ってきましたが、あまり役に立ちませんでした。

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);

よろしくお願いします。

4

3 に答える 3

4
private TextView txtMineCount;
private TextView txtTimer;

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

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

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

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 には、システムに同梱されているデフォルトのフォントがいくつかあります。しかし、このプログラムは、アプリケーションのアセット (基本的には、アプリケーション バンドル内を移動する一連のファイル) のフォント サブディレクトリに埋め込まれているTrueType フォント ファイルを利用したいと考えています。これにより、そのファイルから 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 回実行されます。

于 2012-04-18T21:51:05.527 に答える
2

あなたの質問が何であるかわかりません:

  1. .xml レイアウトでいくつかのビューを定義しました: txtMineCount と txtTimer。

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

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

于 2012-04-18T21:30:27.393 に答える
0

私にはマインスイーパのクローンのように見えます。それが行っているのは、「TextView」のインスタンスを作成することです (おそらく、特定のフォント (この場合は lcd のもの) でテキストを表示するためのものです)。または、コードの各行が何をするかを正確に知る必要がありましたか?

于 2012-04-18T21:30:59.343 に答える