androidtoast自定義
A. android如何自定義Toast動畫
自定義toast動畫其實是view的動畫
1、構建view,替代系統的toast的view。
2、設置view的相關動畫,適當的時機啟動動畫。(在show之後)
B. android里Toast是什麼意思
toast是Android系統中一種消息框類型
拓展資料
Android中的Toast是一種簡易的消息提示框。
當視圖顯示給用戶,在應用程序中顯示為浮動。和Dialog不一樣的是,它永遠不會獲得焦點,無法被點擊。用戶將可能是在中間鍵入別的東西。Toast類的思想就是盡可能不引人注意,同時還向用戶顯示信息,希望他們看到。而且Toast顯示的時間有限,Toast會根據用戶設置的顯示時間後自動消失。
C. android toast 怎麼用
1.
java">Toast.makeText(getApplicationContext(),"默認樣式的Toast",Toast.LENGTH_SHORT).show();//顯示時間較短
2.
Toasttoast=Toast.makeText(getApplicationContext(),"自定義位置的Toast",Toast.LENGTH_LONG);//顯示時間較長
toast.setGravity(Gravity.CENTER,0,0);//居中顯示
toast.show();
3.
Toasttoast=Toast.makeText(getApplicationContext(),"帶圖片的Toast",3000);//顯示時間也可以是數字
toast.setGravity(Gravity.TOP,0,0);//最上方顯示
LinearLayouttoastLayout=(LinearLayout)toast.getView();
ImageViewimageView=newImageView(getApplicationContext());
imageView.setImageResource(R.drawable.icon);
toastLayout.addView(imageView,0);//0圖片在文字的上方,1圖片在文字的下方
toast.show();
4.
LayoutInflaterinflater=getLayoutInflater();//LayoutInflater對象
Viewlayout=inflater.inflate(R.layout.custom_view,null);
ImageViewimageView=(ImageView)layout.findViewById(R.id.imageView);
TextViewtext=(TextView)layout.findViewById(R.id.textView);
imageView.setImageResource(R.drawable.icon);
text.setText("完全自定義的Toast");
Toasttoast=newToast(getApplicationContext());
//底部、水平居中,X偏移50Y偏移50
toast.setGravity(Gravity.CENTER_HORIZONTAL|Gravity.BOTTOM,50,50);
toast.setDuration(Toast.LENGTH_SHORT);
toast.setView(layout);
toast.show();
D. Android 自定義toast能夠支持點擊事件嗎
Toast可以自定義view,可以試試給自定義view點擊事件,但是如果你想點擊,不如使用SnakeBar
E. android 如何獲得 自定義toast的實際長寬
你是在onCreate後面獲取的吧,這樣獲取的都是默認值0,一般要在事件觸發的地方才能獲取正確的值,你的toast定義的view在onResume初始化,然後在handler裡面獲取長寬:
private TextView tv;
private View v;
private Handler handler1 = new Handler(){
public void handleMessage(Message msg) {
Log.d("TAG", "width111=" + tv.getLayoutParams().width + "; height111=" + tv.getLayoutParams().height);
Log.d("TAG", "width111=" + tv.getWidth() + "; height111=" + tv.getHeight());
}
};
public void onResume() {
super.onResume();
Toast t = new Toast(this);
LayoutInflater li = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = li.inflate(R.layout.notelist, null);
t.setView(v);
tv = (TextView) v.findViewById(R.id.note_title);
Log.d("TAG", "width=" + tv.getLayoutParams().width + "; height=" + tv.getLayoutParams().height);
Log.d("TAG", "width=" + tv.getWidth() + "; height=" + tv.getHeight());
handler1.sendEmptyMessageDelayed(0, 100);
t.show();
}
F. 如何在Android開發中熟練使用五種Toast的特效
Android五種Toast特效詳解
默認效果:
代碼:
Toast.makeText(getApplicationContext(), "默認Toast樣式",
Toast.LENGTH_SHORT).show();自定義顯示位置效果:
代碼:
toast = Toast.makeText(getApplicationContext(),
"自定義位置Toast", Toast.LENGTH_LONG);
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();帶圖片效果:
代碼
toast = Toast.makeText(getApplicationContext(),
"帶圖片的Toast", Toast.LENGTH_LONG);
toast.setGravity(Gravity.CENTER, 0, 0);
LinearLayout toastView = (LinearLayout) toast.getView();
ImageView imageCodeProject = new ImageView(getApplicationContext());
imageCodeProject.setImageResource(R.drawable.icon);
toastView.addView(imageCodeProject, 0);
toast.show();完全自定義效果:
代碼
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.icon);
TextView title = (TextView) layout.findViewById(R.id.tvTitleToast);
title.setText("Attention");
TextView text = (TextView) layout.findViewById(R.id.tvTextToast);
text.setText("完全自定義Toast");
toast = new Toast(getApplicationContext());
toast.setGravity(Gravity.RIGHT | Gravity.TOP, 12, 40);
toast.setDuration(Toast.LENGTH_LONG);
toast.setView(layout);
toast.show()其他線程:
代碼:
new Thread(new Runnable() {
public void run() {
showToast();
}
}).start();都可以復制到開發工具里看看實際效果的,找需要的就行了。
G. android開發中關於toast的使用
Toast現在也是可以全局調用啊
我這里封裝了一個toast
這個解決了toast調用多次,屏幕上一直彈出的問題
調用方式
MyToast.showToast(context,"提示",Toast.LENGTH_LONG);
那麼你可以寫個公共的Activity父類,讓所有的子類都繼承它
這樣你可以再封裝了下
public void showLongToast(String msg){
MyToast.showToast(this,msg,Toast.LENGTH_LONG);
}
public void showShortToast(String msg){
MyToast.showToast(this,msg,Toast.LENGTH_SHORT);
}
H. Android Toast可以自定義,有沒有對Toast裡面的字體進行,加粗,改變大小,斜體。
可以在Toast里增加一個TextView然後對TextView做字體加粗,大小設置。
1.字體加粗
textView.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD));//加粗
textView.getPaint().setFakeBoldText(true);//加粗
2.字體大小
textView.setTextSize(500);
3.字體斜體
SpannableString sp = new SpannableString( "斜體文本" ); //設置斜體
sp.setSpan( new StyleSpan(android.graphics.Typeface.BOLD_ITALIC), 0 , tmp.length() , Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
textView.setText(sp);
I. android里的service函數怎麼使用toast
1 Toast是Android中用來顯示顯示信息的一種機制,和Dialog不一樣的是,Toast是沒有焦點的,而且Toast顯示的時間有限,過一定的時間就會自動消失。默認效果,代碼為: ToastImageToast); imageTitleToast); titleTextToast); text.setText("完全自定義Toast"); toast = new Toast(getApplicationContext()); toast.setGravity(Gravity.RIGHT Gravity.TOP, 12, 40); toast.setDuration(Toast.LENGTH_LONG); toast.setView(layout); toast.show(); 5 其他線程,代碼為: new Thread(new Runnable() { public void run() { showToast(); } }).start();
J. android的toast怎麼自定義顯示時間長度
Android中Toast的顯示時間為特定時間且不可更改,但是有時候我們開發設計需要讓Toast顯示更長時間,或者自己完全控制Toast的顯示和關閉。通過查看Toast類的源碼,可以看出,這有點難為它了,Toast類本身並沒有提供相應方法。
但是通過源碼的查看,還是可以看出點眉頭。源碼分析思路在這里轉eoe里的一篇文章,思路較為清晰:
轉:
Toast信息提示框之所以在顯示一定時間後會自動關閉,是因為在系統中有一個Toast隊列。系統會依次從隊列中取(出隊列)一個Toast,並 顯示它。在顯示一段時間後,再關閉,然後再顯示下一個Toast信息提示框。
直到Toast隊列中所有Toast都顯示完為止。那麼有些時候需要這個Toas t信息提示框長時間顯示,直到需要關閉它時通過代碼來控制,而不是讓系統自動來關閉Toast信息提示框。
不過這個要求對於Toast本身來說有些過 分,因為Toast類並沒有提供這個功能。雖然如此,但方法總比問題多。通過一些特殊的處理還是可以實現這個功能的,而且並不復雜。
Toast信息提示框需要調用Toast.show方法來顯示。下面來看一下show方法的源代碼。
public void show() {
if (mNextView == null) {
throw new RuntimeException("setView must have been called");
}
INotificationManager service = getService();
String pkg = mContext.getPackageName();
TN tn = mTN;
try {
// 將當前Toast加入到Toast隊列
service.enqueueToast(pkg, tn, mDuration);
} catch (RemoteException e) {
// Empty
}
}
復制代碼
show方法的代碼並不復雜,可以很容易找到如下的代碼。
service.enqueueToast(pkg, tn, mDuration);
復制代碼
從上面的代碼可以很容易推斷出它的功能是將當前的Toast加入到系統的Toast隊列中。
看到這里,各位讀者應該想到。雖然show方法的表面功能是顯示Toast信息提示框,但其實際的功能是將Toast加入到隊列中,再由系統根據Toast隊列來顯示Toast信息提示框。那麼我們經過更進一步地思考,可以大膽地做出一個初步的方案。
既然系統的Toast隊列可以顯示Toast信息提示框,那麼我們為什麼不可以自己來顯示它呢?
這樣不是可以自己來控制Toast的信息提示框的顯示和關閉了嗎!當然,這就不能再調用show方法來顯示Toast信息提示框了(因為show方法會將Toast加入隊列,這樣我們就控制不了Toast了)。
既然初步方案已擬定,現在就來實施它。先在Toast類找一下還有沒有其他的show方法。
結果發現了一個TN類,該類是Toast的一個內嵌類。在TN類中有一個show方法。TN是ITransientNotification.Stub的子類。從ITransientNotification和TN類中的show方法初步推斷(因為Transient的中文意思是「短暫的」)系統是從Toast隊列中獲得了Toast對象後,利用TN對象的show方法顯示Toast,再利用TN.hide方法來關閉Toast。
首先聲明,這只是假設,我們還不知道這么做是否可行!當然,這也是科學研究的一般方法,先推斷或假設,然後再證明推斷或假設。
現在關鍵的一步是獲得TN對象。遺憾的是TN被聲明成private類型,外部無法訪問。不過別著急。在Toast類中有一個mTN變數。雖然不是public變數,但仍然可以通過反射技術訪問該變數。mTN變數會在創建Toast對象時初始化。
因此,只要獲得mTN變數,就獲得了TN對象。下面的代碼顯示了一個永遠不會自動關閉的Toast信息提示框。
// 先創建一個Toast對象Toast toast = Toast.makeText(this, "永不消失的Toast", Toast.LENGTH_SHORT);// 設置Toast信息提示框顯示的位置(在屏幕頂部水平居中顯示)toast.setGravity(Gravity.TOP | Gravity.CENTER_HORIZONTAL, 0, 0);try{
// 從Toast對象中獲得mTN變數Field field = toast.getClass().getDeclaredField("mTN");
field.setAccessible(true);
Object obj = field.get(toast);
// TN對象中獲得了show方法
Method method = obj.getClass().getDeclaredMethod("show", null);
// 調用show方法來顯示Toast信息提示框
method.invoke(obj, null);
}
catch (Exception e)
{
}
復制代碼
上面的代碼中try{…}catch(…){…}語句中的代碼是關鍵。先利用事先創建好的Toast對象獲得了mTN變數。然後再利用反射技術獲得了TN對象的show方法。
關閉Toast和顯示Toast的方法類似,只是需要獲得hide方法,代碼如下:
try
{
// 需要將前面代碼中的obj變數變成類變數。這樣在多個地方就都可以訪問了
Method method = obj.getClass().getDeclaredMethod("hide", null);
method.invoke(obj, null);
}
catch (Exception e)
{
}
復制代碼
上面的代碼已經很完美地實現了通過代碼控制Toast信息提示框顯示和關閉的功能。
但如果想實現得更完美,可以在Android SDK源代碼中找一個叫ITransientNotification.aidl的文件(該文件是AIDL服務定義文件,將在後面詳細介紹),並在Android工程的src目錄中建一個android.app包,將這個文件放到這個包中。
然後ADT會自動在gen目錄中生成了一個android.app包,包中有一個ITransientNotification.java文件。由於Android SDK自帶的ItransientNotification介面屬於內部資源,外部程序無法訪問,因此,只能將從Toast對象中獲得的mTN變數轉換成剛才生成的ITransientNotification對象了。
這樣就不需要使反射技術獲得show和hide方法了。
經過改良的顯示和關閉Toast信息提示框的代碼如下:
ITransientNotification notification = (ITransientNotification) field.get(toast);
// 顯示Toast信息提示框
notification.show();
// 關閉Toast信息提示框
notification.hide();
復制代碼
最後整理代碼如下:
Java代碼
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import android.app.Activity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class TestToastActivity extends Activity {
private Button showtoast,closetoast;
private Toast toast;
private Field field;
private Object obj;
private Method showMethod,hideMethod;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//初始化按鈕組件
showtoast = (Button)this.findViewById(R.id.showtoast);
closetoast = (Button)this.findViewById(R.id.closetoast);
//設置組件監聽
showtoast.setOnClickListener(new MyOnClickListener());
closetoast.setOnClickListener(new MyOnClickListener());
//創建Toast對象
toast = Toast.makeText(this, "Toast自定義顯示時間測試", 1);
toast.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL, 0, 0);
//利用反射技術拿到mTN對象
reflectionTN();
}
class MyOnClickListener implements View.OnClickListener{
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.showtoast:
try {
showMethod.invoke(obj, null);//調用TN對象的show()方法,顯示toast
} catch (Exception e) {
e.printStackTrace();
}
break;
case R.id.closetoast:
try {
hideMethod.invoke(obj, null);//調用TN對象的hide()方法,關閉toast
} catch (Exception e) {
e.printStackTrace();
}
break;
default:
break;
}
}
}
private void reflectionTN() {
try {
field = toast.getClass().getDeclaredField("mTN");
field.setAccessible(true);
obj = field.get(toast);
showMethod = obj.getClass().getDeclaredMethod("show", null);
hideMethod = obj.getClass().getDeclaredMethod("hide", null);
} catch (Exception e) {
e.printStackTrace();
}
}
}
復制代碼