在视图下方显示 toast 小部件

2023-12-20

对于那些之前在这个项目上帮助过我的人,非常感谢!我的代码不再有任何问题,并且我做了额外的调整。现在该应用程序实际上已经很强大了,我还想做一件事。

请参阅屏幕截图layout https://i.stack.imgur.com/NJW9Y.jpg here.

通常,Toast 视图出现在屏幕的底部中央。我想让它在调用 OnClick 后显示在“提交”按钮的正下方 (8dp)。我怎样才能做到这一点。

See my 更新了完整的项目 https://app.box.com/s/yvcgtnwpri1hf012jjuf here.

package com.lookjohn.guessnumber;

import java.util.Random;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity {
Random random; 
Button button;
EditText text;

int input; 
int MIN, MAX;
int comp; 
int guesses;

public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    random = new Random();
    button = (Button)findViewById(R.id.button1);
    text = (EditText)findViewById(R.id.editText1);

    MIN = 1;
    MAX = 100;
    comp = random.nextInt(MAX - MIN + 1) + MIN; // Generate random number between 1 and 100.
    guesses = 0;

    button.setOnClickListener(myhandler1);
}

View.OnClickListener myhandler1 = new View.OnClickListener() {

    public void onClick(View v) {

        // Implemented max number of guesses, detect 
        // number of guesses and return from the method.

        String value = text.getText().toString(); // Get value from input from editTextView

        // If user submits an empty EditText, return to prevent a crash.
        if (value.isEmpty()) {
            Toast.makeText(MainActivity.this, "You must enter a guess!", Toast.LENGTH_SHORT);
            return;
        }

        input = Integer.parseInt(value); // Turn string into integer
        guesses++;
        if (input > 100) {
            Toast.makeText(MainActivity.this, 
                "That number is greater than 100. Not Valid!", 
                Toast.LENGTH_SHORT).show();
                return;
            }

        else if (input < comp)
            Toast.makeText(MainActivity.this, 
                "Your number is too small.", 
                Toast.LENGTH_SHORT).show();
        else if (input > comp) 
            Toast.makeText(MainActivity.this, 
                "Your number is too big.", 
                Toast.LENGTH_SHORT).show();
        else
            Toast.makeText(MainActivity.this, 
                "Good job! The answer was " + comp + ".\n" +
                "You made " + guesses + " guesses.\n" +
                "Restart the app to try again.", 
                Toast.LENGTH_LONG).show();
    }
};

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

}

android.widget.Toast定义了一堆有用的方法,允许自定义 Toast 通知的外观和感觉。你应该研究的方法是setGravity(int, int, int) http://developer.android.com/reference/android/widget/Toast.html#setGravity%28int,%20int,%20int%29。如果偏移量为 0,下面的代码会将 toast 顶部锚定到所提供视图的底部,并将 toast 中心锚定到视图的中心。

public static void positionToast(Toast toast, View view, Window window, int offsetX, int offsetY) {
    // toasts are positioned relatively to decor view, views relatively to their parents, we have to gather additional data to have a common coordinate system
    Rect rect = new Rect();
    window.getDecorView().getWindowVisibleDisplayFrame(rect);
    // covert anchor view absolute position to a position which is relative to decor view
    int[] viewLocation = new int[2];
    view.getLocationInWindow(viewLocation);
    int viewLeft = viewLocation[0] - rect.left;
    int viewTop = viewLocation[1] - rect.top;

    // measure toast to center it relatively to the anchor view
    DisplayMetrics metrics = new DisplayMetrics();
    window.getWindowManager().getDefaultDisplay().getMetrics(metrics);
    int widthMeasureSpec = MeasureSpec.makeMeasureSpec(metrics.widthPixels, MeasureSpec.UNSPECIFIED);
    int heightMeasureSpec = MeasureSpec.makeMeasureSpec(metrics.heightPixels, MeasureSpec.UNSPECIFIED);
    toast.getView().measure(widthMeasureSpec, heightMeasureSpec);
    int toastWidth = toast.getView().getMeasuredWidth();

    // compute toast offsets
    int toastX = viewLeft + (view.getWidth() - toastWidth) / 2 + offsetX;
    int toastY = viewTop + view.getHeight() + offsetY;

    toast.setGravity(Gravity.LEFT | Gravity.TOP, toastX, toastY);
}

使用它需要修改您的 toast 相关行onClick method:

int offsetY = getResources().getDimensionPixelSize(R.dimen.toast_offset_y);

Toast toast = Toast.makeText(MainActivity.this, "That number is greater than 100. Not Valid!", Toast.LENGTH_SHORT);
positionToast(toast, v, getWindow(), 0, offsetY);
toast.show();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在视图下方显示 toast 小部件 的相关文章

  • 如何在android中显示保存在sdcard文件夹中的图像[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 当我正在显
  • 按下按钮时应用不同的样式

    有没有办法在按下按钮时将样式应用于按钮 如果我有一种风格样式 xml
  • fetchUuidsWithSdp 的奇怪 UUID 逆转

    我有一个在树莓派上运行的 python 蓝牙服务器 使用 PyBluez 我在服务器中使用的uuid是 8f86d132 4ab8 4c15 b8df 0b70cf10ea56 我正在打电话device fetchUuidsWithSdp
  • Dialog.setTitle 不显示标题

    我正在尝试向我的对话框添加自定义标题 但是每当我运行我的应用程序时 它都不会显示标题 我创建对话框的代码是 final Dialog passwordDialog new Dialog this passwordDialog setCont
  • 在 Cordova 应用程序中获取额外功能

    我们有两个 Android 应用程序 一个使用本机 Java 实现 另一个使用 Ionic 编写 Ionic 应用程序启动我的应用程序 这是使用灯插件 https github com lampaa com lampa startapp 我
  • Android Eclipse 上的 Web 服务

    我是 android eclipse java 的新手 事实上这个论坛也是如此 有人遇到过这种情况吗 从用户那里获取输入并通过使用 android eclipse 中的 Web 服务来显示适当的结果 有可用的示例吗 非常感谢 我正在发布教程
  • Android:后台Activity可以执行代码吗?

    后台的活动是否被视为 正在运行 并且可以执行代码 还是处于挂起状态 他们暂停了 活动生命周期 http developer android com reference android app Activity html ActivityLi
  • 为什么是 javascript:history.go(-1);无法在移动设备上工作?

    首先 一些背景 我有一个向用户呈现搜索页面 html 表单 的应用程序 填写标准并单击 搜索 按钮后 结果将显示在标准部分下方 在结果列表中 您可以通过单击将您带到新页面的链接来查看单个结果的详细信息 在详细信息页面中 我添加了一个 返回结
  • Android 手机作为 GSM 调制解调器在 PC 上发送/接收短信?

    是否可以将 Android 移动设备用作 PC 上的 GSM 调制解调器 我正在 net下开发应用程序来发送 接收短信等 现在我想通过 USB 将我的 Android 设备连接到我的 PC 并将其用作 GSM 调制解调器来与其通信 这里是参
  • Android - AudioRecord类不读取数据,audioData和fftArray返回零

    我是 Android 新手 一直在开发音调分析器应用程序 最低 SDK 8 我读了很多关于如何实现 Audiorecord 类的文章 但我想知道为什么它在我录制时不读取任何数据 我尝试显示 audioData 和 fftArray 的值 但
  • 对于一个单元格,RecyclerView onBindViewHolder 调用次数过多

    我正在将 RecyclerView 与 GridLayoutManager 一起使用 对于网格中的每个项目 我需要调用 REST api 来检索数据 然后 从远程异步获取数据后 我使用 UIL 加载 显示图像 一切似乎都很好 但我发现 on
  • okhttp 获取失败响应

    我已经在我的 android 客户端中实现了 okhttp 来进行网络调用 当我收到失败响应时 我会收到失败代码以及与该代码相关的文本作为消息 但我没有收到服务器发送给我的自定义失败响应 在我实施的代码中的失败响应中 我收到的消息只是 错误
  • 编码时捕获 NS_AVAILABLE_IOS

    我知道如何更改支持的最低操作系统IPHONEOS DEPLOYMENT TARGET 我目前正在 Xcode 4 5 下进行开发并使用 iOS 6 0 SDK 我想做的是找到一种方法 每当我使用标记的代码时在编译中抛出警告 NS AVAIL
  • 您使用什么物理 Android 设备进行测试?

    有什么好的推荐用于测试目的的物理 Android 设备吗 我正在苹果阵营寻找像 iPod touch 这样的设备 可以帮助 iOS 开发人员测试他们的东西 我知道有 Nexus One 但那东西相当昂贵 而且我并不真正关心手机的东西 而是可
  • Dagger 2 没有生成我的组件类

    我正在使用 Dagger 2 创建我的依赖注入 几个小时前它还在工作 但现在不再生成组件 这是我创建组件的地方 public class App extends Application CacheComponent mCacheCompon
  • Android Studio 缓慢的增量构建

    我已经完成了许多步骤来完善我们的构建系统 those https stackoverflow com questions 16775197 building and running app via gradle and android st
  • 卡片视图 单击卡片移至新活动

    我是 Android 编程新手 正在研究卡片布局 我想知道如何使其可点击 android clickable true android foreground android attr selectableItemBackground 我的卡
  • 没有用于警告的设置器/字段 Firebase 数据库检索数据填充列表视图

    我只是想将 Firebase 数据库中的数据填充到我的列表视图中 日志显示正在检索数据 但适配器不会将值设置为列表中单个列表项中的文本 它只说 没有二传手 场地插入值 这让我觉得我的设置器没有正确制作 但 Android Studio 自动
  • 通过电子邮件发送文本文件附件

    我正在尝试附加一个文本文件以便通过电子邮件发送 但每当我打开电子邮件应用程序时 它都会说该文件不存在 请帮助 Intent i new Intent Intent ACTION SEND i setType text plain i put
  • 在 Android 应用程序资源中使用 JSON 文件

    假设我的应用程序的原始资源文件夹中有一个包含 JSON 内容的文件 我如何将其读入应用程序 以便我可以解析 JSON See 开放原始资源 http developer android com reference android conte

随机推荐

  • 在 Clojure 中实现 Java 泛型接口

    我正在尝试使用 selenium2 webdriver 项目来掌握 clojure 的窍门网络驱动程序 clj http github com mikitebeka webdriver cljwebdriver 的包装器 然而 由于网络界面
  • Android 中的上下文是如何创建的? ContextThemeWrapper 的目的是什么?

    我正在帮助整理此页面 什么是上下文 https github com codepath android guides wiki Using Context 为了帮助说明组件如何与Context 我通过查看框架源代码创建了这个图 经过一番研究
  • 使用标签或 的灯箱

    是否有任何灯箱实现允许使用 a href a fancybox net 只需很少的工作即可实现这一目标 a href data image each function this fancybox content img attr src t
  • TypingError:在 nopython 模式管道中失败(步骤:nopython 前端)

    我正在尝试使用 numba jit 编写我的第一个函数 我有一个 pandas 数据帧 我需要迭代它并找到每个 350 个点的均方根 因为 python 的 for 循环非常慢 我决定尝试 numba jit 代码是 jit nopytho
  • 在 Python 中使用生成器进行广度优先树遍历

    我正在 David Beazly 的优秀 Python Cookbook 文本中研究如何在 Python 中使用生成器 以下代码配方非常优雅地使用生成器定义了深度优先树遍历 example py Example of depth first
  • 从地图 API 获取建筑物的高度

    是否有任何公共地图 API 谷歌 微软 openstreet 可以返回某些点的屋顶高度 想象一下 您请求一些地址 API 返回坐标 一些信息和建筑物的高度 如果有 OpenStreetMap 有一个身高标签 http wiki openst
  • 如何向块添加额外的参数

    有一个很酷的method https github com MailCore MailCore blob master Source CTBareAttachment h下载附件并接受块作为参数以返回下载进度 CTCoreAttachmen
  • 如何在没有角色的情况下使用 ASP.NET Core Identity?

    在asp net core 2中实现身份而不实现角色是否可行 我尝试执行以下操作 services AddIdentityCore
  • Webpack - 使用 CopyWebpackPlugin 将文件从源复制到公共

    我有一个正在使用 Webpack 的应用程序 在此应用程序中 我需要从我的各个目录中复制一些静态 html 文件source目录到同一层次结构public目录 为了尝试做到这一点 我正在使用复制Webpack插件 https github
  • C++ 编译时一个类的子类列表

    我正在考虑如何创建从模板基类派生的所有类的列表 首先我想要一个模板基类 template
  • Cygwin64 上的 Python 2.7.5:请求安装失败

    我们的项目主要是基于 J2EE 的开发 并使用 Python 编写的自动功能和集成测试 测试环境是Linux 但开发人员使用Windows 7 64位 我们希望也能够在开发人员机器上执行功能测试 在提交之前 不幸的是pexpect wind
  • JavaScript 变量的生命周期

    JavaScript 中用 var 声明的变量的生命周期是多少 我确信 这绝对不符合预期 JavaScript 如何以及何时垃圾收集变量a Since a是内部函数闭包的一部分 理想情况下它永远不应该被垃圾收集 因为内部函数fun 可以作为
  • .NET MAUI 中的页眉和页脚

    我想做与这个问题相同的事情 但是对于 NET MAUI 所有 WPF 窗口中的页眉和页脚相同 https stackoverflow com questions 20113405 same header footer in all wpf
  • 如何使用WebRTC停止屏幕共享?

    我在用着获取用户媒体 https developer mozilla org en US docs Web API Navigator getUserMedia访问屏幕共享 当用户单击停止按钮时 我想停止屏幕共享 根据媒体流API http
  • 如何在div上创建不均匀的圆角?

    我一直在尝试制作一个具有不均匀圆边的 DIV 如下所示 我检查了一些解决方案 最接近的解决方案是使用 border radius 我用过 border bottom left radius 80 50px border bottom rig
  • 无法将 Intellij 与生成的源文件夹一起使用

    相关问题如何配置 IntelliJ IDEA 和 或 Maven 自动添加包含使用 jaxb2 maven plugin 生成的 Java 源代码的目录 https stackoverflow com questions 2644609 h
  • 在 gmail 中通过 PHP 登录时电子邮件尝试失败

    我需要用 PHP 发送电子邮件的帮助 我实际上正在尝试使用 PHP 邮件程序发送电子邮件 不知何故 某些邮件 ID 能够发送电子邮件 但其他一些电子邮件 ID 无法发送 我在 Gmail 中收到一封电子邮件 指出 登录尝试被阻止 有人可以帮
  • 需要 ANSI 92 递归 SQL 语句

    我目前正在将 SQL Server SQL 语句转换为其 ANSI 通用等效项 并且一直坚持使用WITH 语句的递归语句 为了集中讨论这个问题 我将问题简化如下 如果我有两张桌子 报告单位 col1 关键 col2 ParentReport
  • 有终结器但没有 IDisposable 的单例

    这是我从 CLR via C Effective C 和其他资源中对 IDisposable 和终结器的理解 IDisposable 用于确定性地清理托管和非托管资源 负责非托管资源 例如文件句柄 的类应该实现 IDisposable 并提
  • 在视图下方显示 toast 小部件

    对于那些之前在这个项目上帮助过我的人 非常感谢 我的代码不再有任何问题 并且我做了额外的调整 现在该应用程序实际上已经很强大了 我还想做一件事 请参阅屏幕截图layout https i stack imgur com NJW9Y jpg