-5

有人可以尝试为我解释这段代码吗,我真的不明白其中的任何一个,而且网络上似乎没有任何地方可以解释它。我带来了一份“Android Development for Dummies”,但它并没有真正帮助我。

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的引用的局部变量。起初它们没有指向任何东西......所以你必须分配它们。

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

这里我们分配两个变量。我们调用框架的一个方法在由 ID 创建的基于文本的小部件中进行查找。重要的是,我们不是在这里创建这些小部件。我们只是找到与我们用来命名它们的一些 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 字体文件(基本上是在应用程序包中传播的一堆文件)。这会创建一个 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当您以这种方式编写代码时,代码会使用相同的参数运行两次。

于 2012-04-18T21:51:05.527 回答
2

我不确定你的问题是什么:

  1. 您在 .xml 布局中定义了几个视图:txtMineCount 和 txtTimer。

  2. 您正在使用 findViewById() 在运行时检索 Textview 实例。

  3. 您正在运行时在两个视图中设置“字体”属性。

于 2012-04-18T21:30:27.393 回答
0

在我看来像扫雷克隆。它所做的是创建一个“TextView”的实例(可能是用于以某种字体显示文本的东西(在这种情况下是液晶显示器)。或者您是否需要确切地知道每一行代码的作用?

于 2012-04-18T21:30:59.343 回答