private TextView txtMineCount;
private TextView txtTimer;
这声明了两个可以保存对TextView的引用的局部变量。起初它们没有指向任何东西......所以你必须分配它们。
txtMineCount = (TextView) findViewById(R.id.MineCount);
txtTimer = (TextView) findViewById(R.id.Timer);
这里我们分配两个变量。我们调用框架的一个方法在由 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 字体文件(基本上是在应用程序包中传播的一堆文件)。这会创建一个 Typeface 对象,该对象适合应用于该文件中的 TextView。
txtMineCount.setTypeface(lcdFont);
txtTimer.setTypeface(lcdFont);
这只是将两个 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
当您以这种方式编写代码时,代码会使用相同的参数运行两次。