小编Fra*_*ank的帖子

如何防止多个Toast Overlaps

我一直在使用一个常见的"myToast",我myToast.cancel()在发布新的吐司之前使用它.对于Android v2.3及更早版本,这很有效.当需要发送新的吐司时,旧的吐司,如果仍然在 -屏幕,被取消(并立即消失)以替换为新的吐司.如果用户多次按下需要警报的键(以及其他条件),这可以避免堆叠一堆祝酒词.我的实际情况是出现一个吐司当按下错误的键时,如果未按下清除键,则会出现另一个键.

对于Android 4.0和4.1,myToast.cancel()在下一个toast之前发出一个杀死当前和下一个toast.当前的cancel()API确实表明它取消了当前和下一个toast(这似乎相当愚蠢).为什么要取消你想要的吐司?

任何关于取消的想法在Android版本中都能保持一致(以及它在v2.3及更早版本中的工作方式)?

我将尝试一些不道德的双吐司系统跟踪正在使用的吐司,但似乎这种痛苦解决了4.x中的这种不良行为,以便在旧的Android版本中获得完美和逻辑的功能.


好吧,我解决了它,但它并不像我希望的那样干净.我实施了双重吐司方法,它在两个吐司之间交替.首先,我们在以下之前定义活动的祝酒词OnCreate:

Toast toast0;
Toast toast1;
private static boolean lastToast0 = true;
Run Code Online (Sandbox Code Playgroud)

在OnCreate中:

toast0 = new Toast(getApplicationContext());
toast0.cancel();
toast1 = new Toast(getApplicationContext());
toast1.cancel();
Run Code Online (Sandbox Code Playgroud)

最后,当我需要同时显示吐司并取消之前的吐司时,我会使用类似的东西:

if (lastToast0) {
    toast0.cancel();
    toast1.setDuration(Toast.LENGTH_LONG);
    toast1.setText("new message");
    toast1.show();
    lastToast0 = false;
} else {
    toast1.cancel();
    toast0.setDuration(Toast.LENGTH_LONG);
    toast0.setText("new message");
    toast0.show();
    lastToast0 = true;
}
Run Code Online (Sandbox Code Playgroud)

如果您只需要取消现有的吐司(在它超时之前),请使用:

toast0.cancel();
toast1.cancel();
Run Code Online (Sandbox Code Playgroud)

在Nexus 7(4.1),Emulator 4.0以及Android 2.2,2.3的多个设备上进行了测试.

android toast

26
推荐指数
1
解决办法
2万
查看次数

ACRA可以用于图书馆项目吗?

ACRA本身就遇到了一个奇怪的问题:

IllegalStateException: Cannot access ErrorReporter before ACRA#init

我有一个ACRA 4.3.0的应用程序,完美的工作.我将整个应用程序更改为库,因此我可以进行小修改.我创建了一个完全空白的新项目,而不是清单和链接到这个新库.对于尝试此操作的任何其他人,在AcraApplication.java中,您必须删除"resToastText = R.string.crash_toast_text"行并在Acra.init(this)下面添加一个新行;

ACRA.getConfig().setResToastText(R.string.crash_toast_text);

该项目构建良好,在调试中我已经确认ACRA.init(this); 在我的主程序代码之前和错误发生之前运行.在主程序中,我们设置了一些自定义数据:

ACRA.getErrorReporter().putCustomData("Orientation", "L");

它会导致崩溃(或更准确地说,ACRA本身会导致错误)并且不会生成ACRA报告.

任何想法下一步尝试或指示在哪里看?可能是ACRA与库不兼容,如果是这种情况,我可以用不同的方式将它拉出来,但有点挫败了库的目的.


解决方案:Acra.init(this);在init行之前添加以下三行,而不是添加以下行:

ACRAConfiguration config = ACRA.getNewDefaultConfig(this); 
config.setResToastText(R.string.crash_toast_text);
ACRA.setConfig(config);

ACRA.init(this);
Run Code Online (Sandbox Code Playgroud)

请注意,这仅适用于v4.3.0及更高版本.

android init illegalstateexception acra

8
推荐指数
1
解决办法
1746
查看次数

如何让键盘显示返回键?

我想我已经尝试了所有组合,但我无法使用alpha键盘来显示返回键.它总是一个"完成"按钮,这是没用的.在Nexus 7(4.1)上,它更糟糕,并显示一个愚蠢的笑脸按钮和完成按钮,这对我的应用程序没有任何意义.只要我有一个返回按钮,就可以有一个完成按钮.这是我尝试过的众多选项之一:

<AutoCompleteTextView
    android:id="@+id/annotate_edit"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginBottom="15dp"
    android:layout_marginLeft="60dp"
    android:layout_marginRight="60dp"
    android:layout_marginTop="15dp"
    android:completionThreshold="1"
    android:inputType="textCapSentences|textImeMultiLine"
    android:imeOptions="actionDone"
    android:lines="1"
    android:maxLength="18"
    android:textSize="30px" />
Run Code Online (Sandbox Code Playgroud)

我已尝试使用和不使用imeOpitons系列,以及各种inputType选项,包括删除它.有一些选项可以使它成为搜索按钮(没有帮助),但没有列出使其成为返回键.我也试过"lines = 2",但没有解决它.还有其他想法吗?

keyboard android return

5
推荐指数
1
解决办法
4855
查看次数

有没有什么方法可以使用LargeHeap for v3.x而忽略2.x in Manifest?

我很想在Manifest中使用Android:LargeHeap ="true"选项来获得额外的内存(我们在高分辨率的1980x1200显示器上处理5+ MB位图,并且很快就会期待更大的显示.

我已经完成了处理Android中用于位图的糟糕内存处理的所有常规技巧(即无法知道碎片内存中是否有足够大的洞,而不是试图祈祷它不会崩溃).我已经花了数周优化,修剪和应用其他技巧来最小化内存并防止崩溃.这是在2.x vs 3.x/4.x中可以完成哪些功能的技巧,但是将它们全部保存在一个应用程序中.无需指出"如何优化位图" - 我已经完成了这些并应用了我能做到的事情.

版本2.x不支持LargeHeap,并且我在2.x中不需要LargeHeap选项的较低分辨率屏幕使用不同的图像.(也没有内存不足问题).

当android:minSdkVersion ="8"时,它根本不允许使用Android:LargeHeap选项.

有没有办法有条件地为包含3.x的系统包含LargeHeap,并在2.x中忽略它?或者如果检测到3.x,应用程序本身是否尝试设置LargeHeap?我找不到任何办法,但也许我忽略了一些技巧.

我也意识到LargeHeap相当糟糕,但我们已经没有其他技巧了.理想情况下,只有在OnCreate程序中真正需要(和允许)时,以编程方式执行LargeHeap会很好.

android manifest android-largeheap

3
推荐指数
2
解决办法
1449
查看次数