0 Просмотров 3416 reCode

reCode #5: Всплывающие сообщения и ресурсы приложения

Я и моя рубрика снова с вами! В этом выпуске поговорим про  всплывающие сообщения и ресурсы приложения.

Однако перед тем, как мы приступим, хотелось бы сделать небольшое отступление. Поскольку я сам учусь, и рассказываю вам про то, что вот-вот выучил, то было бы разумно дать вам ссылку на сайт, с которого я черпаю большую часть информации.

Приступим к проекту:

Application name: reCode5
Company domain: redroid
Package name: redroid.recode5
Activity Name: MyActivity

Теперь давайте подумаем что должно быть на нашем экране. Поскольку мы собираемся научиться использовать ресурсы приложения (в сегдняшнем случае strings.xml) и всплывающие сообщения, то достаточно будет всего двух кнопок и поля для отображения текста.

[xml]

xmlns:android="/schemas.android.com/apk/res/android"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:orientation="horizontal">
android:id="@+id/linearLayout1"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_margin="30dp">
android:layout_width="wrap_content"
android:text="TextView"
android:layout_height="wrap_content"
android:id="@+id/text1"
android:layout_gravity="center_horizontal"
android:layout_marginBottom="50dp"
android:textSize="25dp">





[/xml]

Теперь посмотрим на файл activity_my.xml в графическом виде. Здесь нас интересует окошко Component tree.

Здесь заметны желтые восклицательные знаки у иконок элементов экрана.

Это AS ругается на то, что текст на кнопках и вообще любых элементах экрана задан прямым текстом. Как сделать так, чтобы AS всё нравилось? Существует отдельный файл strings.xml, где прописаны все строчки текста, которые могут использоваться часто в приложении, а писать каждый раз строку лениво. То есть у каждой строки есть свой id, по которому можно вызвать строку. Добавим наши кнопки в /app/src/main/res/values/strings.xml.

После последней строки перед концом файла (строкой ) добавим две строки с нашими кнопками:

[xml]
Кнопка 1
Кнопка 2
[/xml]

Названия btn1 и btn2 будут идентификаторами строчек «Кнопка 1» и «Кнопка 2» соответственно. Теперь файл strings.xml выглядит так:

[xml]

reCode5
Hello world!
Settings
Кнопка 1
Кнопка 2


[/xml]

Возвращаемся в activity_my.xml и вместо прямого текста «Кнопка 1» и «Кнопка 2» вписываем «@string/btn1» и «@string/btn2» соответственно. Восклицательные знаки пропали, а мы частично научились пользоваться ресурсами приложения.

Всплывающие сообщения обеспечиваются благодаря классу Toast, для начала подключим его в качестве библиотеки. В настоящий момент список моих подключенных библиотек в файле MyActivity.java выглядит так:

[java]
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
[/java]

Сейчас по нажатию кнопок меняется лишь текст сверху. Код нашего MyActivity.java:

[java]
package redroid.recode5;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class MyActivity extends Activity {
TextView text1;
Button button1, button2;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);

text1 = (TextView) findViewById(R.id.text1);
button1 = (Button) findViewById(R.id.button1);
button2 = (Button) findViewById(R.id.button2);

final OnClickListener oclButton = new OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.button1:
text1.setText("Была нажата первая кнопка.");
break;
case R.id.button2:
text1.setText("Была нажата вторая кнопка.");
break;
}
}
};

button1.setOnClickListener(oclButton);
button2.setOnClickListener(oclButton);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.my, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
[/java]

Осталось дописать по строке в каждом случае нажатия кнопок.

[java]
Toast.makeText(getApplicationContext(), "Кнопка 1", Toast.LENGTH_SHORT).show();
[/java]

Метод makeText имеет три параметра: контекст размещения в приложении, отображаемый текст и длительность показа сообщения (также может иметь значение Toast.LENGTH_LONG). Во втором случае дописываем аналогичную. После этого код моего обработчика стал таким:

[java]
final OnClickListener oclButton = new OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.button1:
text1.setText("Была нажата первая кнопка.");
Toast.makeText(getApplicationContext(), "Кнопка 1", Toast.LENGTH_SHORT).show();
break;
case R.id.button2:
text1.setText("Была нажата вторая кнопка.");
Toast.makeText(getApplicationContext(), "Кнопка 2", Toast.LENGTH_SHORT).show();
break;
}
}
};
[/java]

Теперь запускаем приложение, тыкаем на кнопки и видим всплывающие сообщения! :)

По всем вопросам как обычно — в комментарии к выпуску на сайте, или в группе, или в мой контакт. Писать в комментарии в Google+ или Twitter не лучшая затея — мониторить эти сети у меня не хватит времени и внимания!

Комментариев 0

Авторизуйтесь через популярные соц.сети

Вконтакте Google+