小编Kai*_*han的帖子

我可以同时使用"adjustResize"软键盘行为和状态栏后面的工具栏吗?

在我的Android应用程序中,对我来说使用adjustResize软键盘的行为至关重要.因此,用户可以向下滚动到其他UI元素,例如"继续"按钮.

我注意到adjustResize只有当我同时具有Manifest设置和android:fitsSystemWindows="true"布局根元素时才会有效.(如果我错了,请纠正我!)

但是android:fitsSystemWindows="true"工具栏不再位于状态栏后面.这很有道理,但不是我想要的.

当工具栏位于其后面时,状态栏具有与工具栏颜色相匹配的深色阴影.我所拥有的android:fitsSystemWindows="true"是一个无色的状态栏和一个比我想要的低24dp的工具栏.

为了adjustResize键盘行为,我会放弃匹配的彩色状态栏.但我的问题是,它们可能同时存在吗?我敢为美丽和无障碍做梦吗?

更有经验的人知道神奇的设置组合吗?或者,或许,作为一种解决方法,明确地为状态栏着色的方法?

供参考:

这些是具有RelativeLayout根元素的活动,其中一些是ListViews和EditTexts.

工具栏是 android.support.v7.widget.Toolbar

可能相关的风格项目:

<style name="AppBaseTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="windowNoTitle">true</item>
<item name="windowActionBar">false</item>
<item name="android:windowContentOverlay">@null</item>
Run Code Online (Sandbox Code Playgroud)

PS - 我已经阅读了几十个关于软键盘行为的类似问题,但无法找到任何对工具栏的意外影响有用的东西.反之亦然,很多关于工具栏/状态栏行为的Style问题,但看似没什么关系.从来没有,抱歉,如果我错过了什么!

提前谢谢了!

编辑

我一直在玩删除android:fitsSystemWindows="true"和添加更多ScrollViews或尝试将所有内容放入相同的ScrollView.这什么都不做.

如果我删除android:fitsSystemWindows="true"然后UI的底部被"胶合"到屏幕的底部 - 它不会"调整大小"而是粘贴到软键盘的顶部,就像我期望它与adjustResizeManifest中的set一样.

android:fitsSystemWindows="true"在根视图中进行设置会使UI像我期望的那样调整大小 - 但它也会使工具栏不再在statusBar后面绘制.

所以我仍然是我开始的地方:(

添加布局XML代码示例:

<android.support.design.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/root"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
 <!-- CoordinatorLayout because this view uses SnackBars -->

    <!-- Relative Layout to lock "continue" button bar to …
Run Code Online (Sandbox Code Playgroud)

keyboard android android-layout android-softkeyboard android-styles

16
推荐指数
2
解决办法
3852
查看次数

卸载后已保存Firebase身份验证。如何删除?

我最近发现,即使卸载了我的应用程序,Firebase Auth也会将自身保存在设备上。我不知道如何删除此旧的Auth信息。

我不希望用户在卸载并重新安装该应用程序后仍然登录。如果除了我自己对同一设备上的“全新安装”进行的测试之外,没有其他原因。

我知道没有简单的方法来捕获卸载事件,因此我想在首次启动时清除所有潜在的旧Auth信息。

因此,我添加了代码(似乎工作正常)来检查这是否是首次启动:

Boolean firstRun = prefs.getBoolean("firstrun", true);
if (firstRun) {
    // delete everything an old user could have left behind
    // ==> This is where I need help <==
    prefs.edit().putBoolean("firstrun", false).apply();
} else {
    // move along, not the first launch
}
Run Code Online (Sandbox Code Playgroud)

我尝试过(失败):

FirebaseAuth authData = FirebaseAuth.getInstance();  
authData.signOut();
Run Code Online (Sandbox Code Playgroud)

这些调用似乎也正是针对此iOS的相关问题的建议,但我无法运用其智慧: Firebase-删除并重新安装应用程序不会取消对用户的身份验证

即使在调用signOut()该应用程序后,仍然使用旧帐户登录我!

我的“注销”按钮使用FirebaseAuth.getInstance().signOut();并起作用。关于这个“旧的” Auth实例,在卸载后将保存的消息中,它是否会死掉,是否有些奇怪(可能是?)

特别是当我卸载然后从Android Studio安装/运行时:

  1. 首先,authData和currentUser都不为空
  2. 我调用上面的代码,试图摆脱这个老用户
  3. 3毫秒后(我立即调用该代码后),它们仍然不是NULL。
  4. 再过2毫秒,currentUser是NULL(是吗?)
  5. 再过71毫秒...仍然为空(到目前为止很好)
  6. 不到一秒钟之后...我是以旧用户身份登录的吗?这怎么可能?

在Firebase控制台的“身份验证”下,此帐户显示为6天前的最新签名。因此,无论如何都无法重新登录。

有谁知道如何从设备中删除FirebaseAuth数据?我不想“删除”用户帐户,只需从此设备中删除所有它的痕迹即可。

奇怪的是,我一直不愿意登录的帐户甚至不是在此设备上登录我的应用程序的最后一个帐户。过去这从来都不是问题(因此我什至不知道Firebase在卸载后保存了Auth)。因此,看起来好像卸载后并不总是保存Auth信息...但是发生这种情况时,无法删除吗?

任何帮助,不胜感激!

android firebase firebase-authentication

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

要在每次执行中发送多个推送通知的Firebase函数*返回*?

我正在使用单个firebase功能向我的Android用户发送多个推送通知.

每个通知的详细信息都会在我们的Firebase数据库中写下它们应发送的日期和小时.我使用cron通过http请求触发此Firebase功能.

我的问题是Firebase功能应该返回什么才能完成所有Firebase节点的循环(代表通知)并完成发送所有通知?

这就是我现在拥有的.它在发送第一个通知后退出.我想要的是它完成所有Firebase子节点的查看并为每个节点发送通知.

我不明白Promises的想法足以弄清楚在多个Push Notifications的情况下返回什么.我几乎完全忘记了如何编写javascript也没有帮助.

exports.sendHourlyNotifications = functions.https.onRequest((req, res) => {
  const dateStr = req.query.date;
  const hourStr = req.query.hour;
  console.log('sendHourlyNotifications', 'date: ' + dateStr + " hour: " + hourStr);
  const parentRef = admin.database().ref();
  const notifRef = parentRef.child('all-notifications');
  const hourRef = notifRef.child(dateStr).child(hourStr);
  return hourRef.once('value').then(snapshot => {
      const updates = {};
      snapshot.forEach(function(childSnapshot) {
        const deviceToken = childSnapshot.child("deviceToken").val();
        console.log('sendHourlyNotifications', 'childSnapshot Key: ' + childSnapshot.key);
        const title = childSnapshot.child("title").val();
        const body = childSnapshot.child("body").val();

        console.log('sendHourlyNotifications', "DeviceToken: " + deviceToken + " …
Run Code Online (Sandbox Code Playgroud)

node.js firebase-realtime-database google-cloud-functions firebase-cloud-messaging firebase-admin

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