2012-04-18 6 views
-5

Может кто-нибудь попробует объяснить этот код для меня, я действительно не понимаю его, и нигде в Интернете, похоже, это не объясняет. Я привел копию «Android Development for Dummies», и это не помогло мне.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

Я думаю, что получаю другие строки, но не знаю об этом Typeface lcdFont = Typeface.createFromAsset (getAssets(), "fonts/lcd2mono.ttf"); Я также не понимаю, почему я бы установил txtMineCount в другой textView (определенный в макете Xml). Я бы подумал, что могу просто импортировать .ttf прямо в textview в xml ...? – Dave

ответ

4
private TextView txtMineCount; 
private TextView txtTimer; 

объявляет две локальные переменные, которые могут содержать ссылки на TextView. Сначала они не указывают на что-нибудь ... так что вы должны назначить их.

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

Здесь мы относим две переменные. мы называем метод чтобы сделать поиск среди текстовых виджетов, созданных с помощью идентификатора. Важно, что мы не создаем эти виджеты здесь. Мы просто находим alre ady-выделенные объекты, которые соответствуют некоторым константам ID, которые мы используем для их имени.

Не обязательно «безопасно» предполагать, что эти поиски преуспевают в общем случае, потому что View.findViewById() может вернуть null. Но тот, кто написал этот код, предполагает, что на самом деле были объекты TextView, созданные в другом месте кода, которые имеют эти конкретные идентификаторы.

(если они не правы о том, что, затем пытается установить шрифт на txtMineCount или txtTimer просто вызвать исключение ...)

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

Android имеет некоторые шрифты по умолчанию, которые поставляются с система. Но эта программа хочет использовать TrueType Font File, который был встроен в подкаталог шрифта ресурсов приложения (в основном это куча файлов, которые перемещаются внутри вашего пакета приложений). Это создает объект Typeface, подходящий для применения к TextView из этого файла.

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

Это просто устанавливает шрифт, используемый двумя TextViews шрифтом сверху.


Обратите внимание, что вы можете получить эквивалентный эффект без промежуточных переменных.Этот код должен делать то же самое, что вы размещены:

((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

Отличный ответ. :) – kcoppock

+0

@kcoppock Мои программы полны сложных вопросов, поэтому иногда ответы на простые - приятный перерыв! – HostileFork

2

Я не уверен, что ваш вопрос:

  1. Вы определили несколько представлений в вашем XML-макет: txtMineCount и txtTimer.

  2. Вы используете findViewById() для извлечения экземпляров Textview во время выполнения.

  3. Вы устанавливаете свойство «шрифт» в обоих представлениях во время выполнения.

0

Выглядит как клоун Сафари. Что она делает это создание экземпляра «TextView» (возможно, что-то для dislpaying текст в определенном шрифте (ЖК вещь в данном случае). Или же вы должны точно знать, что делает каждая строка кода?

Смежные вопросы