当前位置:首页 » 安卓系统 » androidtoast自定义

androidtoast自定义

发布时间: 2022-08-04 16:21:14

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特效详解

  1. 默认效果:

    代码:
    Toast.makeText(getApplicationContext(), "默认Toast样式",
    Toast.LENGTH_SHORT).show();

  2. 自定义显示位置效果:

    代码:
    toast = Toast.makeText(getApplicationContext(),
    "自定义位置Toast", Toast.LENGTH_LONG);
    toast.setGravity(Gravity.CENTER, 0, 0);
    toast.show();

  3. 带图片效果:

    代码
    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();

  4. 完全自定义效果:

    代码
    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()

  5. 其他线程:

    代码:
    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();

}

}

}
复制代码

热点内容
宁夏医科大学总医院oa服务器地址 发布:2024-05-21 20:05:27 浏览:847
androidapp前台 发布:2024-05-21 20:05:19 浏览:618
元器件存储温度 发布:2024-05-21 20:03:06 浏览:12
对安全算法 发布:2024-05-21 19:47:37 浏览:6
freenasftp 发布:2024-05-21 19:44:01 浏览:282
ftp图片用什么打开 发布:2024-05-21 19:22:35 浏览:960
如何学数字密码 发布:2024-05-21 19:21:19 浏览:455
程序算法流程 发布:2024-05-21 19:21:19 浏览:242
linuxc启动程序 发布:2024-05-21 19:20:28 浏览:751
压缩机补胎 发布:2024-05-21 19:09:07 浏览:410