在android4.1.2下对 Toast五种显示效果建立属于你自己的Toast
Toast用于向用户显示一些帮助/提示。网上对这5种效果都有描述,有的还提供了原代码,经测试多是基于android低版本的,试了几个代码在android4.1.2上均有点问题,但还是要非常感谢,没有这些GGMM的贡献,我今天做这个效果不知要困难多少!
下面一步一步来说明Toast的强大,定义一个属于你自己的Toast。
首先介绍开发环境:Mac
OSX10.8.2+Android4.1.2+Eclipse4.2
一、界面布局
界面比较简单,如下图:五个按钮(对应5种效果)+一个EditView(用于输入Toast中的信息)+一个TextView(用于显示EditView中的信息)。工程项目名为Toast5Demo,程序需要的两张图片,选取系统自带(一个搜索图标,另一个系统图标)。
对应的activity_toast_main.xml是:
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
android:id="@+id/myText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:hint="@string/hello_world"
android:textSize="12pt"
android:textStyle="bold" />
android:id="@+id/myeditText1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:hint="@string/myeditText1_text" >
android:id="@+id/mybutton1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/mybutton1_text" />
android:id="@+id/mybutton2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/mybutton2_text"
/>
android:id="@+id/mybutton3"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/mybutton3_text" />
android:id="@+id/mybutton4"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/mybutton4_text" />
android:id="@+id/mybutton5"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/mybutton5_text" />
这是strings.xml文件:
resources>
Toast5Demo
五种Toast效果演示!
Settings
Toast5DemoMainTest
请输入Toast中的信息
默认的Toast特效样式
自定义Toast的显示位置
带图片的Toast特效
完全自己定义的Toast特效
其它线程方式的Toast效果
图片属性
另外,在显示第四种效果即“完全自己定义的Toast特效”时,还需要使用一个布局文件,命名为custom.xml,代码是:
xmlns:tools="http://schemas.android.com/tools"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:background="#ffffffff"
android:orientation="vertical"
android:id="@+id/llToast" >
android:layout_height="wrap_content"
android:layout_margin="1dip"
android:textColor="#ffffffff"
android:layout_width="fill_parent"
android:gravity="center"
android:background="#bb000000"
android:id="@+id/tvTitleToast" />
android:layout_height="wrap_content"
android:orientation="vertical"
android:id="@+id/llToastContent"
android:layout_marginLeft="1dip"
android:layout_marginRight="1dip"
android:layout_marginBottom="1dip"
android:layout_width="wrap_content"
android:padding="15dip"
android:background="#44000000" >
android:id="@+id/tvImageToast"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:contentDescription="@string/my_name"
android:src="@drawable/ic_launcher" />
android:layout_height="wrap_content"
android:paddingRight="10dip"
android:paddingLeft="10dip"
android:layout_width="wrap_content"
android:gravity="center"
android:textColor="#ff000000"
android:id="@+id/tvTextToast" />
二、五种效果实现
1、默认的Toast特效样式
代码listener1 = newOnClickListener() {
public voidonClick(View v) {
setTitle(R.string.mybutton1_text);
Toast.makeText(ToastMainActivity.this,getText(R.string.mybutton1_text)+myeditText1.getText().toString(),Toast.LENGTH_LONG).show();
myText.setText(myeditText1.getText().toString());
myeditText1.setText("");
}
};
2、自定义显示位置效果
代码listener2 = newOnClickListener() {
public voidonClick(View v) {
setTitle(R.string.mybutton2_text);
myToast=Toast.makeText(getApplicationContext(),getText(R.string.mybutton2_text)+myeditText1.getText().toString(),Toast.LENGTH_LONG);
myToast.setGravity(Gravity.CENTER, 0, 0);
myToast.show();
myText.setText(myeditText1.getText().toString());
myeditText1.setText("");
}
};3、带图片效果
代码listener3 = newOnClickListener() {
public voidonClick(View v) {
setTitle(R.string.mybutton3_text);
myToast=
Toast.makeText(getApplicationContext(),getText(R.string.mybutton3_text)+myeditText1.getText().toString(),
Toast.LENGTH_LONG);
myToast.setGravity(Gravity.CENTER, 0, 0);
LinearLayout toastView =
(LinearLayout) myToast.getView();
ImageView imageCodeProject =
newImageView(getApplicationContext());
imageCodeProject.setImageResource(R.drawable.ic_action_search);
toastView.addView(imageCodeProject,
0);
myToast.show();
myText.setText(myeditText1.getText().toString());
myeditText1.setText("");
}
};4、完全自定义效果
代码listener4 = newOnClickListener() {
public voidonClick(View v) {
setTitle(R.string.mybutton4_text);
LayoutInflater inflater =
getLayoutInflater();
View layout =
inflater.inflate(R.layout.custom,(ViewGroup)
findViewById(R.id.llToast));
ImageView image = (ImageView)
layout.findViewById(R.id.tvImageToast);
image.setImageResource(R.drawable.ic_launcher);
TextView title = (TextView)
layout.findViewById(R.id.tvTitleToast);
title.setText("Attention");
TextView text = (TextView)
layout.findViewById(R.id.tvTextToast);
text.setText(getText(R.string.mybutton4_text)+myeditText1.getText().toString());
myToast= newToast(getApplicationContext());
myToast.setGravity(Gravity.RIGHT | Gravity.TOP, 12, 40);
myToast.setDuration(Toast.LENGTH_LONG);
myToast.setView(layout);
myToast.show();
myText.setText(myeditText1.getText().toString());
myeditText1.setText("");
}
};5、其他线程
代码listener5 = new OnClickListener() {
public voidonClick(View v) {
setTitle(R.string.mybutton5_text);
newThread(newRunnable() {
public voidrun() {
showToast();
}
}).start();
myText.setText(myeditText1.getText().toString());
myeditText1.setText("");
}
public voidshowToast() {
handler.post(new Runnable() {
//
@Override
public voidrun() {
myToast=Toast.makeText(getApplicationContext(),getText(R.string.mybutton5_text),Toast.LENGTH_SHORT);
myToast.show();
}
});
}
}; 三、完整代码
Main.javapackagecom.shhuangpu.toast5demo;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.EditText;
import android.widget.Button;
import android.view.View.OnClickListener;
import android.view.View;
import android.widget.Toast;
import android.widget.TextView;
import android.view.Gravity;
import android.widget.LinearLayout;
import android.widget.ImageView;
import android.view.LayoutInflater;
import android.view.ViewGroup;
import android.os.Handler;
public classToastMainActivity
extends Activity {
Handler handler = new Handler();
private TextView myText;
private EditText myeditText1;
private Toast myToast;
private Button myButton1;
OnClickListener listener1 = null;
private Button myButton2;
OnClickListener listener2 = null;
private Button myButton3;
OnClickListener listener3 = null;
private Button myButton4;
OnClickListener listener4 = null;
private Button myButton5;
OnClickListener listener5 = null;
@Override
publicvoid onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_toast_main);
listener1= new OnClickListener() {
public void onClick(View v) {
setTitle(R.string.mybutton1_text);
Toast.makeText(ToastMainActivity.this,getText(R.string.mybutton1_text)+myeditText1.getText().toString(),Toast.LENGTH_LONG).show();
myText.setText(myeditText1.getText().toString());
myeditText1.setText("");
}
};
listener2 = new OnClickListener() {
public void onClick(View v) {
setTitle(R.string.mybutton2_text);
myToast=Toast.makeText(getApplicationContext(),getText(R.string.mybutton2_text)+myeditText1.getText().toString(),Toast.LENGTH_LONG);
myToast.setGravity(Gravity.CENTER, 0, 0);
myToast.show();
myText.setText(myeditText1.getText().toString());
myeditText1.setText("");
}
};
listener3 = newOnClickListener() {
public void onClick(View v) {
setTitle(R.string.mybutton3_text);
myToast =
Toast.makeText(getApplicationContext(),getText(R.string.mybutton3_text)+myeditText1.getText().toString(),
Toast.LENGTH_LONG);
myToast.setGravity(Gravity.CENTER, 0, 0);
LinearLayout toastView = (LinearLayout) myToast.getView();
ImageView imageCodeProject = new ImageView(getApplicationContext());
imageCodeProject.setImageResource(R.drawable.ic_action_search);
toastView.addView(imageCodeProject, 0);
myToast.show();
myText.setText(myeditText1.getText().toString());
myeditText1.setText("");
}
};
listener4 = newOnClickListener() {
public void onClick(View v) {
setTitle(R.string.mybutton4_text);
LayoutInflater inflater = getLayoutInflater();
View layout = inflater.inflate(R.layout.custom,(ViewGroup)
findViewById(R.id.llToast));
ImageView image = (ImageView)
layout.findViewById(R.id.tvImageToast);
image.setImageResource(R.drawable.ic_launcher);
TextView title = (TextView)
layout.findViewById(R.id.tvTitleToast);
title.setText("Attention");
TextView text = (TextView)
layout.findViewById(R.id.tvTextToast);
text.setText(getText(R.string.mybutton4_text)+myeditText1.getText().toString());
myToast = newToast(getApplicationContext());
myToast.setGravity(Gravity.RIGHT | Gravity.TOP, 12, 40);
myToast.setDuration(Toast.LENGTH_LONG);
myToast.setView(layout);
myToast.show();
myText.setText(myeditText1.getText().toString());
myeditText1.setText("");
}
};
listener5 = newOnClickListener() {
public void onClick(View v) {
setTitle(R.string.mybutton5_text);
new Thread(new Runnable() {
public voidrun() {
showToast();
}
}).start();
myText.setText(myeditText1.getText().toString());
myeditText1.setText("");
}
public voidshowToast() {
handler.post(new Runnable() {
//
@Override
public voidrun() {
myToast=Toast.makeText(getApplicationContext(),getText(R.string.mybutton5_text),Toast.LENGTH_SHORT);
myToast.show();
}
});
}
};
myText=(TextView)findViewById(R.id.myText);
myeditText1=(EditText)findViewById(R.id.myeditText1);
myButton1 =
(Button)findViewById(R.id.mybutton1);
myButton1.setOnClickListener(listener1);
myButton2 =
(Button)findViewById(R.id.mybutton2);
myButton2.setOnClickListener(listener2);
myButton3 =
(Button)findViewById(R.id.mybutton3);
myButton3.setOnClickListener(listener3);
myButton4 =
(Button)findViewById(R.id.mybutton4);
myButton4.setOnClickListener(listener4);
myButton5 =
(Button)findViewById(R.id.mybutton5);
myButton5.setOnClickListener(listener5);
}
@Override
publicbooleanonCreateOptionsMenu(Menu menu)
{
getMenuInflater().inflate(R.menu.activity_toast_main, menu);
returntrue;
}
}
四、后记,本程序主要在于实现功能,没有进一步优化,比如使用Swich语句等,有兴趣的可以做做。