Поиск по этому блогу

понедельник, 26 декабря 2011 г.

Toast - всплывающие уведомления в Android приложении

При написании одного приложения мне нужно было что бы при ошибке приложения появлялось окно в котором было бы пояснение этой ошибки, и я задался вопросом как бы так сделать что бы оно работало как обычный MessageBox в C++/C#. Такое окно имеет вид:




Скриншот №1

Для того что бы его получить достаточно использовать библиотеку Toast — для отображения окна и Gravity — для расположения сообщения на экране. Для того что бы такое сделать — создаем проект в Eclipse и открываем наш main.xml, удаляем все что там есть и вставляем вот этот код:
main.xml__________________________________________________________________
<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <Button
        android:id="@+id/button1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Жмякни мну" />
</LinearLayout>


Это мы создали форму которая на скришоте выше. Теперь открываем наш файл *.java в моем случае это buttonActivity.java и пишем вот такое:

buttonActivity.java_______________________________________________________
import android.app.Activity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
public class page extends Activity implements OnClickListener
{
        Button mButton;
        
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        mButton = (Button) findViewById(R.id.button1);
        mButton.setOnClickListener(this);
    }
    
    public void onClick(View a)
    {
        Toast toast = Toast.makeText(getApplicationContext(), "Этот текст будет появляться неоткуда!", Toast.LENGTH_LONG);//задает выравнивание, остальные два параметры задают, на сколько пикселей будет смещено сообщение
        toast.setGravity(Gravity.CENTER, 0, 0); // координаты сообщения
        toast.show();

    }
}


Это мы рассмотрели обычное оформление, но есть возможность добавить картинку которая будет сопровождать текст и будет облегчать восприятие сообщения, будь то ошибка или примечание. Ниже скриншот того что получится:


Скриншот №2

Для добавления изображения в наше сообщение потребуется программно создать объект класса ImageView и задать для него изображение из ресурсов с помощью метода setImageResource. Затем потребуется получить стандартный внешний вид сообщения и добавить в него созданный объект ImageView с указанием, в какую позицию добавить изображение, в нашем случае указана нулевая позиция, чтобы изображение было добавлено выше текста. Код для создания этого окна с изображением представлен ниже.

Добавляем библиотеки:

import android.widget.ImageView;
import android.widget.LinearLayout;


и заменяем код в onClick() на:

public void onClick(View a)
    {
        Toast toast = Toast.makeText(getApplicationContext(), "Все тот же текст", Toast.LENGTH_LONG);
        toast.setGravity(Gravity.CENTER, 0, 0);
        LinearLayout toastView = (LinearLayout) toast.getView();
        ImageView imageWorld = new ImageView(getApplicationContext());
        imageWorld.setImageResource(R.drawable.ic_launcher);
        toastView.addView(imageWorld, 0);
        toast.show();
    }


и запускаем наше приложение, если сделали все правильно то должно выйти то что показано на скришоте №2. 
Статью опубликовал по просьбе пользователя yota9. Если есть какие-либо ошибки в коде или есть вариант проще пишите в комментариях, буду рад узнать что-то проще.