触摸取消吐司消息

用户8467834

我试图让我的吐司消息在背景被触摸时过早消失。当触摸屏幕的每个部分时,吐司应该消失......我知道该方法是 .cancel 但我无法正确使用它......这是我尝试过的:

我尝试使用 .setontouchlistener 方法,但它不起作用......我是 android 开发的新手,所以如果有一个示例代码可以学习,我将不胜感激......我会向你展示我的代码,就是这样:

public class MainActivity extends AppCompatActivity {
private LayoutInflater layoutInflater;
private RelativeLayout relalayout
private LinearLayout linelayout;
private ScrollView scrollayout;
public Toast toast;
private ImageView backgroundimg;

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_activitymain);
    Bundle extradata1 = getIntent().getExtras();
    String textString = extradata1.getString("ImportedData");
    TextView mytext = (TextView) findViewById(R.id.text);
    relalayout = (RelativeLayout) findViewById(R.id.relalayout);
    linelayout = (LinearLayout) findViewById(R.id.linelayout);
    scrollayout = (ScrollView) findViewById(R.id.scrolllayout);
    backgroundimg = (ImageView) findViewById(R.id.imageView2);
    toast = new Toast(this);

 if (textString.equals("firstimported")) {

        String mytxt = "";
        StringBuffer sbuffer = new StringBuffer();
        InputStream is = this.getResources().openRawResource(R.raw.firsttext);
        BufferedReader reader = new BufferedReader(new InputStreamReader(is));


        try {

            while ((mytxt = reader.readLine()) != null) {
                sbuffer.append(mytxt + "\n");

            }

            mytext.setText(sbuffer);
            is.close();


        } catch (Exception e) {
            e.printStackTrace();
        }
        String text = sbuffer.toString();
        SpannableString ss = new SpannableString(text);

ClickableSpan clickspan1 = new ClickableSpan() {
@Override
public void onClick(View widget) {
    Toast toast = Toast.makeText(MainActivity.this, "this is the toast",
    Toast.LENGTH_SHORT);
    toast.show();}
    @Override
    public void updateDrawState(TextPaint ds) {

        super.updateDrawState(ds);
        ds.setColor(Color.WHITE);
        ds.setUnderlineText(false);}
    };

    scrollayout.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        toast.cancel();
        return false;
    }
});
ss.setSpan(clickspan1, 52, 53, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

mytext.setText(ss);
        mytext.setMovementMethod(LinkMovementMethod.getInstance());

}
}

public void onBackPressed() {
    Intent intent = new Intent(MainActivity.this, OtherActivity.class);
    startActivity(intent);
    finish();
}

当我触摸屏幕时活动崩溃了..所以它不起作用。

布里杰什·乔希

试试这个

Toast toast; 
@Override
public void onClick(View widget) {
    toast = Toast.makeText(MainActivity.this, "this is the toast", Toast.LENGTH_SHORT);
    toast.show();
}
scrollayout.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if(toast != null)
            toast.cancel();
        return super.onTouch(v, event);
    }
});

根据代码更新答案

public class MainActivity extends AppCompatActivity {
    private ScrollView scrollayout;
    public Toast toast;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_activitymain);
        TextView mytext = (TextView) findViewById(R.id.text);
        scrollayout = (ScrollView) findViewById(R.id.scrolllayout);
        StringBuffer sbuffer = new StringBuffer();
        sbuffer.append("1234567890\n");
        sbuffer.append("1234567890\n");
        sbuffer.append("1234567890\n");
        sbuffer.append("1234567890\n");
        sbuffer.append("1234567890\n");
        sbuffer.append("1234567890\n");
        sbuffer.append("1234567890\n");
        sbuffer.append("1234567890\n");
        sbuffer.append("1234567890\n");
        sbuffer.append("1234567890\n");
        String text = sbuffer.toString();
        SpannableString ss = new SpannableString(text);
        ClickableSpan clickspan1 = new ClickableSpan() {
            @Override
            public void onClick(View widget) {
                toast = Toast.makeText(MainActivity.this, "this is the toast", Toast.LENGTH_SHORT);
                toast.show();
            }

            @Override
            public void updateDrawState(TextPaint ds) {
                super.updateDrawState(ds);
                ds.setColor(Color.WHITE);
                ds.setUnderlineText(false);
            }
        };
        scrollayout.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if (toast != null) {
                    toast.cancel();
                    toast = null;
                }
                return false;
            }
        });
        ss.setSpan(clickspan1, 52, 53, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        mytext.setText(ss);
        mytext.setMovementMethod(LinkMovementMethod.getInstance());
    }
}

我更改了您使用的一些值,因为我没有所有资源,但您需要做的主要更改是在 ClickSpan 初始化和 scrolllayout 触摸事件中。请比较它们。在显示吐司后,我通过滚动获得了以下输出。在此处输入图片说明

长尺寸 gif 的应用程序。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Android取消点击吐司

来自分类Dev

取消 Vue.js 时如何将吐司消息放在单独的文件中

来自分类Dev

如何显示吐司消息?

来自分类Dev

无法显示吐司消息

来自分类Dev

吐司消息不会消失

来自分类Dev

吐司消息未打开

来自分类Dev

吐司消息不显示

来自分类Dev

吐司消息崩溃应用

来自分类Dev

无法显示吐司消息

来自分类Dev

触摸取消IB操作

来自分类Dev

触摸取消IB操作

来自分类Dev

如何在Android中取消吐司?

来自分类Dev

如何在selendroid中验证吐司消息

来自分类Dev

使用UI线程显示吐司消息?

来自分类Dev

如何在selendroid中验证吐司消息

来自分类Dev

如何设计自定义吐司消息?

来自分类Dev

带有自定义消息的吐司

来自分类Dev

取消对视图的多次触摸

来自分类Dev

如何取消对子UIControl的触摸?

来自分类Dev

选中或取消选中复选框时如何显示吐司?

来自分类Dev

如何提取消息?

来自分类Dev

触摸移动卡住忽略尝试取消触摸移动的尝试

来自分类Dev

如何将吐司消息添加到提交按钮

来自分类Dev

更改Android Kotlin中的默认FLAG_SECURE吐司消息

来自分类Dev

我的应用程序不会显示“ KitKat”吐司消息

来自分类Dev

吐司消息未在x秒内显示为片段?

来自分类Dev

禁用通知还会禁用该应用程序的吐司消息

来自分类Dev

带有吐司消息的 Angular Js 重定向

来自分类Dev

表单提交后如何显示引导程序吐司消息?