reCode #5: Всплывающие сообщения и ресурсы приложения
Я и моя рубрика снова с вами! В этом выпуске поговорим про всплывающие сообщения и ресурсы приложения.
Однако перед тем, как мы приступим, хотелось бы сделать небольшое отступление. Поскольку я сам учусь, и рассказываю вам про то, что вот-вот выучил, то было бы разумно дать вам ссылку на сайт, с которого я черпаю большую часть информации.
Приступим к проекту:
Application name: reCode5
Company domain: redroid
Package name: redroid.recode5
Activity Name: MyActivity
Теперь давайте подумаем что должно быть на нашем экране. Поскольку мы собираемся научиться использовать ресурсы приложения (в сегдняшнем случае strings.xml) и всплывающие сообщения, то достаточно будет всего двух кнопок и поля для отображения текста.
[xml]
android:layout_height="match_parent"
android:layout_width="match_parent"
android:orientation="horizontal">
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_margin="30dp">
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]
[/xml]
Названия btn1 и btn2 будут идентификаторами строчек «Кнопка 1» и «Кнопка 2» соответственно. Теперь файл strings.xml выглядит так:
[xml]
[/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+