Android - 无法理解代码

时间:2012-04-18 21:28:07

标签: android android-layout

有人可以试着为我解释一下这个代码,我真的不明白它的任何一个,网上似乎没有解释它。我带了一份'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);

先谢谢你们。

3 个答案:

答案 0 :(得分: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 Font File(基本上是在应用程序包内传播的一堆文件)。这将创建一个适合从该文件中应用TextView的Typeface对象。

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代码使用相同的参数运行两次。

答案 1 :(得分:2)

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

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

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

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

答案 2 :(得分:0)

在我看来就像一个扫雷克隆。它正在做的是创建一个'TextView'的实例(可能是用某种字体来表示文本的东西(在这种情况下是lcd的东西)。或者你是否需要确切知道每行代码的作用?