小编Act*_*ine的帖子

使用FragmentTransaction添加的片段的适应系统窗口效果

我有一个带有导航抽屉和全出血碎片的活动(顶部的图像必须出现在Lollipop上的半透明系统栏后面).虽然我有一个临时解决方案,其中片段通过简单地<fragment>在Activity的XML 中标记而膨胀,但它看起来很好.

然后,我不得不更换<fragment><FrameLayout>和执行片段交易,现在的片段不,出现在系统栏的后面了,尽管fitsSystemWindows被设置为true所有所需的层级.

我相信<fragment>在Activity的布局与其自身的夸大之间可能存在一些差异.我用Google搜索并为KitKat找到了一些解决方案,但这些解决方案都不适用于我(Lollipop).

activity.xml

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
                                        xmlns:app="http://schemas.android.com/apk/res-auto"
                                        android:id="@+id/drawer_layout"
                                        android:layout_height="match_parent"
                                        android:layout_width="match_parent"
                                        android:fitsSystemWindows="true">

    <FrameLayout
            android:id="@+id/fragment_host"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fitsSystemWindows="true">

    </FrameLayout>

    <android.support.design.widget.NavigationView
            android:id="@+id/nav_view"
            android:layout_height="match_parent"
            android:layout_width="wrap_content"
            android:layout_gravity="start"
            android:fitsSystemWindows="true"/>

</android.support.v4.widget.DrawerLayout>
Run Code Online (Sandbox Code Playgroud)

fragment.xml之

<android.support.design.widget.CoordinatorLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true">

    <android.support.design.widget.AppBarLayout
            android:layout_width="match_parent"
            android:layout_height="224dp"
            android:fitsSystemWindows="true"
            android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
...
Run Code Online (Sandbox Code Playgroud)

activity.xml以这种方式工作时它起作用:

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
                                        xmlns:app="http://schemas.android.com/apk/res-auto"
                                        android:id="@+id/drawer_layout"
                                        android:layout_height="match_parent"
                                        android:layout_width="match_parent"
                                        android:fitsSystemWindows="true">

    <fragment xmlns:android="http://schemas.android.com/apk/res/android"
              xmlns:tools="http://schemas.android.com/tools"
              android:id="@+id/fragment"
              android:name="com.actinarium.random.ui.home.HomeCardsFragment"
              tools:layout="@layout/fragment_home"
              android:layout_width="match_parent"
              android:layout_height="match_parent"/>

    <android.support.design.widget.NavigationView
            android:id="@+id/nav_view"
            android:layout_height="match_parent"
            android:layout_width="wrap_content"
            android:layout_gravity="start"
            android:fitsSystemWindows="true"/>

</android.support.v4.widget.DrawerLayout>
Run Code Online (Sandbox Code Playgroud)

android android-layout android-fragments

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

无论操作系统如何在Java中获取干净的绝对文件路径?

这是问题所在.经过一些连接,我可能碰巧有这样的字符串

"C:/shared_resources/samples\\import_packages\\catalog.zip"
Run Code Online (Sandbox Code Playgroud)

甚至这个

"C:/shared_resources/samples/subfolder/..\\import_packages\\catalog.zip"
Run Code Online (Sandbox Code Playgroud)

我想要一些代码将这种字符串转换为具有统一分隔符的路径.

想到的第一个解决方案是使用new File(srcPath).getCanonicalPath(),但这里是棘手的部分.此方法依赖于调用测试的系统.但是我需要将字符串传递给远程计算机(带有浏览器的Selenium Grid节点),这里和那里的系统分别是Linux和Windows.因此,尝试做new File("C:/shared_resources/samples\\import_packages\\catalog.zip").getCanonicalPath()类似的结果"/home/username/ourproject/C:/shared_resources/samples/import_packages/catalog.zip".使用钝性正则表达式替换似乎也不是一个非常好的解决方案.

有没有办法修剪路径并使分隔符统一(并且可能解决..它)而不试图隐含地绝对化它?

java path filepath

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

从Firebase Functions调用Google Play Developer API

我想发展我的用户的应用内购买和订阅的服务器端验证的建议,我想用火力地堡功能为.基本上它必须是一个HTTP触发器函数,它接收购买令牌,调用Play Developer API来验证购买,然后对结果做一些事情.

但是,调用许多Google API(包括Play Developer API)需要进行非平凡的授权.以下是我理解所需设置的方法:

  1. 必须有一个启用了Google Play Developer API v2的GCP项目.
  2. 它应该是一个单独的项目,因为在Google Play控制台中只能有一个链接到Play商店.
  3. 我的Firebase Functions项目必须以某种方式对该其他项目进行身份验证.我认为使用服务帐户最适合此服务器到服务器方案.
  4. 最后,我的Firebase函数代码必须以某种方式获取身份验证令牌(希望是JWT?),最后进行API调用以获得订阅状态.

问题是绝对没有人类可读的文档或指导.鉴于Firebase中的入口流量包含在免费计划中(因此我假设他们鼓励使用Firebase功能中的Google API),这一事实非常令人失望.我已经设法在这里和那里找到一些信息,但是对于谷歌API的经验太少(大多数只需要使用api密钥),我需要帮助将它放在一起.

这是我到目前为止所发现的:

  1. 我有一个链接到Play商店并启用了API的GCP项目.但出于某种原因,尝试在API资源管理器中对其进行测试会导致错误"用于调用Google Play Developer API的项目ID尚未在Google Play开发者控制台中进行链接".
  2. 我创建了一个服务帐户并导出了一个JSON密钥,其中包含生成JWT的密钥.
  3. 我还在Play Console中为该服务帐户设置了读取权限.
  4. 我找到了一个用于Google API 的Node.JS客户端库,它是alpha版本并且文档非常稀疏(例如,没有关于如何使用JWT进行身份验证的明显文档,也没有关于如何调用android发布者API的示例).目前我正在努力解决这个问题.不幸的是,我对阅读JS库代码感到不太舒服,特别是当编辑器没有提供跳转到突出显示的函数源的可能性时.

我很惊讶没有被询问或记录,因为从Firebase功能验证应用内购买似乎是一项常见任务.有没有人成功完成它,或者Firebase团队可能会介入回答?

google-api firebase google-api-nodejs-client google-play-developer-api google-cloud-functions

13
推荐指数
1
解决办法
2209
查看次数

带有自动换行的EditText,没有换行符,键盘操作设置为"next"

这已经被问过很多次(1,2,3,4 ...),但那是很久以前,既没有答案,我现在的工作.因此发布新问题而不是碰撞旧问题.对不起,副本.

我需要一个EditText,其中:

  • 它不允许换行;
  • 屏幕键盘应显示"下一步"按钮而不是换行符;
  • 原来它是一线高;
  • 但是当内容溢出时,它会包含多行文本之类的单词.

如果您有Gmail或收件箱应用,我需要完全具有电子邮件主题字段的功能.

这是近似图片 - 只有键盘应显示>按钮,而不是插入符号按钮.

截图

我一直在尝试各种EditText属性及其组合,包括那些android:inputType="textEmailSubject",但我总是让它单行而不是包装,或者我有这个插入按钮,它允许换行.另一个有趣的事实是,我可以使用非库存键盘(AnySoftKeyboard),但不能使用库存键盘.

请帮忙

android android-edittext

9
推荐指数
1
解决办法
1642
查看次数

动画徽标以及CoordinatorLayout中的折叠工具栏

我想以下列方式实现带有徽标的可折叠工具栏:

  1. 具有重叠内容的灵活空间,如此处所示(已经具有此功能);
  2. 这个空间中的视差图案被纯色(同样有这个)
  3. 水平居中的徽标,必须出现在内容的正上方,但在工具栏折叠时向上浮动: 小样 在行动中它应该像Pesto的叶子一样(不一定可以调整大小,但这将是一个加号): 在运动中

这是我的布局:

<android.support.design.widget.CoordinatorLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true">

    <android.support.design.widget.AppBarLayout
            android:layout_width="match_parent"
            android:layout_height="192dp"
            android:fitsSystemWindows="true"
            android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

        <android.support.design.widget.CollapsingToolbarLayout
                android:id="@+id/collapsing_toolbar"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:fitsSystemWindows="true"
                app:layout_scrollFlags="scroll|exitUntilCollapsed"
                app:contentScrim="?attr/colorPrimary">

            <ImageView
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:fitsSystemWindows="true"
                    android:src="@drawable/random_pattern"
                    android:scaleType="fitXY"
                    app:layout_collapseMode="parallax"
                    app:layout_collapseParallaxMultiplier="0.75"/>

            <android.support.v7.widget.Toolbar
                    android:id="@+id/toolbar"
                    android:layout_width="match_parent"
                    android:layout_height="?attr/actionBarSize"
                    app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
                    app:layout_collapseMode="pin">

            </android.support.v7.widget.Toolbar>

        </android.support.design.widget.CollapsingToolbarLayout>

    </android.support.design.widget.AppBarLayout>

    <android.support.v4.widget.NestedScrollView
            android:id="@+id/nested_scroll_view"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_behavior="@string/appbar_scrolling_view_behavior"
            app:behavior_overlapTop="64dp">

        <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                tools:context=".MainActivityFragment"
                android:orientation="vertical">

            <android.support.v7.widget.CardView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_margin="8dp">

                <!-- card content -->

            </android.support.v7.widget.CardView>

        </LinearLayout>

    </android.support.v4.widget.NestedScrollView>

</android.support.design.widget.CoordinatorLayout>
Run Code Online (Sandbox Code Playgroud)

问题是,无论我在哪里放置徽标图片,要么它不会像我需要的那样移动,要么一切都会中断.感觉可能需要自定义行为.不幸的,我在新设计库中找到的这两个教程都没有解释如何扩展它 - 只是如何使用提供的东西.它没有发布的源代码,反编译的代码没有评论,并且非常纠结,而且我对Android的布局内部结构感到不舒服的事实使它更糟糕.

请帮忙?

android android-design-library android-coordinatorlayout

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

如何删除EditText drawable padding?

我浪费了最后一小时试图弄清楚如何在一个简单的EditText中摆脱这个填充: 在此输入图像描述

我想要的只是将输入与其他内容对齐,就像美丽的设计指南所说的那样.

布局不可能更简单:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:tools="http://schemas.android.com/tools"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            tools:context="com.actinarium.tiomantas.SetupChallengeFragment">

    <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="16dp"
            android:orientation="vertical">

        <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="@string/new_challenge_name"/>

        <EditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"

                android:hint="@string/new_challenge_name_hint1"
                android:singleLine="false"/>

    </LinearLayout>

</ScrollView>
Run Code Online (Sandbox Code Playgroud)

我尝试将EditText上的填充设置为0dp - 文本已移位但行保持原样.奇怪的是,我找不到关于这个问题的任何信息,好像没有人注意到.

android android-layout android-edittext

7
推荐指数
1
解决办法
2656
查看次数

如何使用REST在Firestore文档中插入服务器时间戳?

我想使用对Firestore createDocument方法的REST调用来插入文档。字段之一是应在服务器上设置的时间戳字段。使用Android SDK,就像用Date字段注释@ServerTimestamp并保持为空一样简单-现在如何在REST中做到这一点?

{
  "fields": {
    "timezoneId": {
      "stringValue": "Europe\/London"
    },
    "city": {
      "stringValue": "London"
    },
    "timestamp": {
      "timestampValue": "???"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我尝试使用null,,0空字符串timestamp-一切都会失败,并出现要求标准RFC3339格式的错误(例如2018-01-31T13:50:30.325631Z)。我可以使用任何占位符值,或以任何方式获取该时间戳记吗?

rest firebase google-cloud-firestore

6
推荐指数
1
解决办法
743
查看次数

在 Android 的后台线程上初始化 Firebase 是否安全?需要注意什么?

在我的设置中,Firebase 需要大约 250 毫秒进行初始化(在 Nexus 5 上测量,作为有和没有冷启动的“首次显示时间”的差异FirebaseInitProvider / CrashlyticsInitProvider)。这是一个问题,因为如果没有 Firebase,我的应用程序冷启动只需 350 毫秒,而 Firebase 会使这个时间增加一倍。

我正在考虑禁用默认的FirebaseInitProviderCrashlyticsInitProvider,它在应用程序启动之前在主线程上运行,并在后台线程上手动进行初始化(例如从 启动它Application.onCreate())。

FirebaseApp.initializeApp()问:调用后台线程安全吗?如果是这样,我应该注意什么?我知道,如果需要,例如getUser()当 Firebase 仍在后台启动时,我必须实现一些锁定,以便我的线程等待它准备好。我也不关心准确的屏幕时间报告,因此如果 Firebase Analytics 延迟注册其活动生命周期回调,这不是问题。

PS 中有一个synchronizedFirebaseApp.initializeApp(),这意味着工程师假设有人会尝试从另一个线程调用它。我更担心内部结构,这些内部结构没有开源可供检查。

PPS 另外,我的应用程序是一个单进程应用程序,所以它不太可能Application.onStart()被多次调用(除非我在这里遗漏了一些东西)。

multithreading android firebase

6
推荐指数
1
解决办法
994
查看次数

如何在不覆盖方法本身的情况下覆盖方法的 javadoc?

假设我有两个类:

public abstract class AbstractFoo {

    /**
     * Do bar. Subclasses may override this method, it is not required that they do baz.
     */
    public void bar() {
        // default implementation
    }

}

public class ConcreteFoo extends AbstractFoo {

    /**
     * Do bar. <b>Note:</b> does not do baz, you have to do it yourself.
     */
    @Override
    public void bar() {
        super.bar();
    }
}
Run Code Online (Sandbox Code Playgroud)

在子类 ( ConcreteFoo) 中,我想覆盖bar()的 javadoc 但保持与超类 ( AbstractFoo) 中的实现相同。有没有办法在不覆盖方法的情况下做到这一点?

java overriding javadoc

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

无法按宽度包装任意行数的blockquote-like TextView

我需要渲染任意长度的引用块.文本必须与左边对齐,而块本身与右边对齐,类似于这个: 例

对于我正在尝试一种TextViewandroid:width="wrap_content",android:gravity="start"android:layout_gravity="end".但是,只有当文本适合单行时,这才能正常工作 - 如果文本长TextView于此行,则行为如下:

  • 第一个引用块只是一个带空格的句子 - 吞噬所有父级的宽度;
  • 第二个街区 - 一些空间没有破坏:Raw&#160;persistence may&#160;be the only&#160;option other&#160;than giving&#160;up&#160;entirely.- 仍然是块的行为match_parent.
  • 第3个块使用显式换行符 - 看起来最接近需要的换行符,但这是最不灵活的选项,并且右侧还有一些额外的填充.

截图

这是布局(paddingRight替换layout_marginRight为突出目的 - 行为是相同的两种方式):

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

    <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="end"
            android:textAppearance="@style/TextAppearance.AppCompat.Body1"
            android:lineSpacingExtra="3.5dp"
            android:paddingLeft="24dp"
            android:layout_marginRight="24dp"
            android:text="Raw persistence may be the only option other than giving up entirely."
            />

    <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="end"
            android:textAppearance="@style/TextAppearance.AppCompat.Body1"
            android:lineSpacingExtra="3.5dp"
            android:paddingLeft="24dp"
            android:layout_marginRight="24dp"
            android:text="Raw&#160;persistence may&#160;be the only&#160;option other&#160;than giving&#160;up&#160;entirely."
            /> …
Run Code Online (Sandbox Code Playgroud)

android textview android-layout

4
推荐指数
1
解决办法
771
查看次数

动画完成的Highcharts活动?

在Highcharts重绘动画完成时,有没有办法设置事件监听器?从我看到的情况来看,redraw事件会在更改时立即触发,而不会等待动画.或者也许还有其他方法可以在图表变得静止时等待?

此外,是否可以将事件监听器添加到已经呈现的图表中(例如,通过addEventListener,而不是通过JSON配置)?

javascript-events highcharts

3
推荐指数
1
解决办法
4950
查看次数