小编soc*_*qwe的帖子

如何在Android上实现NestedScrolling?

使用support-v4库22.1.0 android支持嵌套滚动(pre android 5.0).不幸的是,这个功能并没有真正记录.有两个接口(NestedScrollingParentNestedScrollingChild)以及两个辅助委托类(NestedScrollingChildHelperNestedScrollingParentHelper).

有没有人在Android上使用NestedScrolling?

我尝试设置一个小例子,我使用NestedScrollView实现两者NestedScrollingParentNestedScrollingChild.

我的布局看起来像这样:

<android.support.v4.widget.NestedScrollView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/parent"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

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

    <View
        android:id="@+id/header"
        android:layout_width="match_parent" android:layout_height="100dp"
        android:background="#AF1233"/>

    <android.support.v4.widget.NestedScrollView
        android:id="@+id/child"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        >

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

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="#12AF33"
            android:text="@string/long_text"/>

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

  </LinearLayout>

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

我想在(id = parent)中显示a header view和另一个NestedScrollView(id = child NestedScrollView).

我们的想法是,在运行时使用以下方法调整子滚动视图的高度OnPredrawListener:

public class MainActivity extends Activity {

  @Override protected void onCreate(Bundle …
Run Code Online (Sandbox Code Playgroud)

android android-appcompat

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

像Pinterest或Tumblr一样向后滑动

有没有人知道Pinterest或Tumblr如何实现"刷卡"方法.

即在Pinterest上,您可以点击新闻Feed上的帖子.比DetailActivity已启动并显示所选帖子的详细信息.您可以按后退按钮返回新闻Feed活动,或者您可以向左滑动(详细信息活动)以返回新闻Feed活动.

视频:http://youtu.be/eVcSCWetnTA

通常我会使用overridePendingTransition(),但overridePendingTransition()需要动画(像资源ID R.anim.foo).仅当用户进行滑动手势时,Pinterest和Tumblr才会启动动画.他们还根据手指移动支持某种"逐帧动画".因此,他们跟踪手指移动的距离,并将过渡动画设置为相应的百分比值.

我知道如何使用"真正的java"动画/ AnimatorSet对象FragmentTransaction来动画片段替换.使用片段我必须覆盖onCreateAnimator(),但我不知道如何使用Activities实现类似的东西.活动有onCreateAnimator()(或类似的东西)吗?也不知道如何滑动行为,因为它现在没有启动动画,但更多的是逐步改变Window/Activity/Fragment的属性或者其他......

有什么建议?

编辑:我在youtube上找到了一个pinterest应用程序的视频:http://youtu.be/eVcSCWetnTA 这就是我想要实现的内容.

我猜Pinterest正在使用Fragments并onCreateAnimator()实现"向后滑动".由于我的应用程序已经在一个活动中已经有Fragment和ChildFragments,因此如果我可以为活动实现它,那将更容易.

再一次:我知道如何检测滑动手势,这不是我要求的.观看youtube视频:http://youtu.be/eVcSCWetnTA


更新:我创建了一个小库,它与Pinterest或Tumblrs实现的行为并不完全相同,但对于我的应用程序,这似乎是一个很好的解决方案:https://github.com/sockeqwe/SwipeBack? source = c

android swipe

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

产品风味:找到重复的类

我有一个非常愚蠢的问题,但我几小时后就坐在我的应用程序前面,但我无法理解问题所在.

我有一个Android应用程序(用kotlin编写),我想制作两种产品风格并覆盖产品风格的类/文件:

所以我的gradle脚本是这样的:

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'


android {
  ...
  productFlavors {
    foo {
      applicationId "com.foo"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我的文件结构如下:

 - src
    - androidTest
    - foo
      - java
        - com
          - example
            - Bar.kt
    - main
      - java
        - com
          - example
            - Bar.kt
    - test
Run Code Online (Sandbox Code Playgroud)

所以基本上我想Bar.ktfoo产品风格中覆盖文件,但不知何故它不起作用:它说类Bar是重复的.

任何提示?

android kotlin android-gradle-plugin android-productflavors

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

Android:在SQLite中使用UUID作为主键

我的应用需要与其他应用用户同步(在自己的设备上).我还想支持离线编辑,当用户连接到互联网时,这些编辑会与其他协作用户同步.

因此,用户A改变(当他离线时)一些数据(换句话说,他将更新数据库条目)或向数据库添加新记录.当用户A连接到互联网时,所有更改和新记录都将传递给其他协作用户.因此,用户B将获得更改/更新,并可以将其插入/更新到用户B本地设备数据库中.

但我需要确保数据库条目的ID在整个系统中是唯一的.因此我需要使用像UUID这样的东西.

我的问题:在android sqlite数据库表中使用UUID(String/Varchar)作为主键而不是自动递增的整数是不是一个坏主意?

我想通过使用字符串(UUID有36个字符)作为主键会出现性能问题.

我想索引uuids而不是整数需要更长的时间(比较字符串与比较整数).我还猜测,当我使用UUID时,每次插入新的数据库记录/条目时,数据库都需要重新索引主键列,因为它们的主键索引不再处于排序顺序(这将是我何时使用整数自动递增主键,因为每个未来的记录都会在末尾添加,因为新的自动递增的主键始终是目前为止最大的数字,因此索引将自动按排序顺序排列).我还需要做的是加入2到3张桌子.我还猜测,比较JOINS上的字符串而不是整数会减慢数据库查询的速度.

但是我无法看到实现这种协作同步系统的任何其他可能性,所以我必须使用UUID,对吧?

另一种可能性是使用整数自动增量主键并使用第二列uuid.因此,为了处理用户本地设备,我将使用此主键(整数)进行JOINS等,而我将使用uuid列与其他用户进行同步.

你们对这种方法有什么看法,或者你认为有多少工作,因为你不会期望UUID直接作为主键出现重大的性能问题?

还有其他建议吗?

sqlite performance uuid android primary-key

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

Gradle依赖项:按相对路径编译项目

是否可以在Gradle(在android studio中)指定一个依赖于当前项目边界之外的另一个gradle项目?例如,相对路径如下:

dependencies {
  compile project('../../stdlib/dagger')
}
Run Code Online (Sandbox Code Playgroud)

所以我特里是这样的:

我有一个Android应用程序.结构如下所示:

  • MyApp(路径为/ Users/foo/workspace/MyApp)
    • app(路径是/ Users/foo/workspace/MyApp/app)

我有一个包含3个子模块的gradle android库项目:

  • stdlib(路径是/ Users/foo/workspace/stdlib)
    • 匕首(路径是/ Users/foo/workspace/stdlib/dagger)
    • utils(路径是/ Users/foo/workspace/stdlib/utils)
    • http(路径是/ Users/foo/workspace/stdlib/http)

我想要的是将dagger,utils,http模块编译到MyApp项目中.

stdlib库模块正在大力开发,并随着MyApp的发展而增长.因此,每次我做一点改动时,我都不想将它们推入maven存储库.

那么有可能以某种方式链接其他gradle项目吗?我正在寻找一个临时解决方案.一旦源稳定,我会将std库推送到maven存储库.

此外,作为解决方法,可以使用sourceSet的解决方案.我还考虑在MyApp中创建一个库文件夹,它是stdlib的符号链接,但我没有按预期工作:

  • MyApp(路径为/ Users/foo/workspace/MyApp)
    • app(路径是/ Users/foo/workspace/MyApp/app)
    • 库(符号链接到/ Users/foo/workspace/stdlib)
 dependencies {
      compile project(':libraries:dagger')
    }
Run Code Online (Sandbox Code Playgroud)

知道如何在gradle中解决这种依赖吗?

java android gradle android-studio

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

我是否必须取消订阅已完成的观察?

如果一个observable完成了,我是否还必须取消订阅/处置(在RxJava2中)observable以删除Observer(防止内存泄漏),或者一旦发生onCompleteonError事件发生,这是由RxJava内部处理的吗?

对其他类型的像什么Single,Completable,Flowable等.

java rx-java rx-java2

27
推荐指数
2
解决办法
5858
查看次数

匕首的范围2

我可能错过了一些东西,但我认为像@Singleton这样的Scopes用来定义"范围生命周期".

我在Android应用程序中使用Dagger 2(但我不认为这个问题与Android有关).

我有1个模块:

@Module public class MailModule {

  @Singleton @Provides public AccountManager providesAccountManager() {
    return new AccountManager();
  }

  @Singleton @Provides public MailProvider providesMailProvider(AccountManager accountManager) {
    return new MailProvider(accountManager);
  }
}
Run Code Online (Sandbox Code Playgroud)

我有两个不同的组件,@Singleton范围:

@Singleton
@Component(modules = MailModule.class)
public interface LoginComponent {

  public LoginPresenter presenter();
}


@Singleton
@Component(
    modules = MailModule.class
)
public interface MenuComponent {

  MenuPresenter presenter();

}
Run Code Online (Sandbox Code Playgroud)

两者都有,MenuPresenter并且LoginPresenter有一个@Inject构造函数.虽然MenuPresenter期望MailProvider作为参数,但LoginPresenter需要AccountManager:

  @Inject public MenuPresenter(MailProvider mailProvider) { ... }

  @Inject public LoginPresenter(AccountManager …
Run Code Online (Sandbox Code Playgroud)

java android dagger-2

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

PHP-MYSQL:将Unix时间戳转换为DateTime,反之亦然

即时通讯使用php 5.4.6和MySQL 5.5.29,我将UNIX TIMESTAMP转换为MYSQL DATETIME,反之亦然.Mysql和php在同一台本地机器上运行.

我有一个简单的mysql表

CREATE TABLE Entry(
id SERIAL PRIMARY KEY,
created DATETIME NOT NULL);
Run Code Online (Sandbox Code Playgroud)

要插入数据我使用php PDO和mysql NOW().这很好,正确的日期时间存储在数据库中.

我的计划是在客户端使用unix时间戳(服务器端的php和mysql).

所以我想向我的客户提供unix时间戳.因此我使用MySql UNIX_TIMESTAMP()函数直接在查询中进行转换.

所以示例查询如下所示:

SELECT created, UNIX_TIMESTAMP(created) AS TS FROM Entry
Run Code Online (Sandbox Code Playgroud)

结果:created = 2013-02-14 20:47:35 TS = 1360871255

所以现在我想做另一种方式,我传递一个UNIX时间戳,并希望将它与我的数据库中的条目进行比较.不幸的是我无法编写有效的PHP脚本.我不知道为什么,但是当我将相同的时间戳(1360871255)传递给PHP时,我不会使用此方法获得2013-02-14 20:47:35:

public static function toDateTime($unixTimestamp){
    return date("Y-m-d H:m:s", $unixTimestamp);
}
Run Code Online (Sandbox Code Playgroud)

当我打电话给DateTime(1360871255)时会返回2013-02-14 20:02:35这不是原来的DateTime.

我知道,我不需要将1360871255格式化为Ymd H:m:s以在MYSQL中使用它,但1360871255似乎不是我预期的时间(并且MYSQL UNIX_TIMESTAMP已经返回).

我想要做的是一个简单的查询,向我显示比某个时间戳更早的条目,这样的简单:

SELECT * FROM Entry WHERE created < 1360871255
Run Code Online (Sandbox Code Playgroud)

但正如我之前提到的,查询结果不是预期的,因为1360871255似乎不是正确的时间.

我没有为php中的mysql连接指定任何特殊时区.

有什么建议?

php mysql datetime unix-timestamp

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

无法部署工件:无法找到工件

我想将库部署到我的公司远程存储库.

这是我第一次将库项目部署到远程存储库.

我收到以下错误消息:

org.sonatype.aether.transfer.ArtifactNotFoundException:找不到工件com.http:http:jar:0.0.1 in internal.repo(http://jenkins.internal.com/)

也许我理解完全错误,但错误消息说,在远程存储库中不存在我第一次尝试部署的工件.所以当然没有这样的神器.当我尝试上传工件时,为什么maven会尝试获取工件?

我的pom文件:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/maven-v4_0_0.xsd">

<modelVersion>4.0.0</modelVersion>
<groupId>com.http</groupId>
<artifactId>httpkit</artifactId>
<version>0.0.1</version>
<packaging>jar</packaging>
<name>httpkit</name>

<properties>
    <platform.version> 4.1.1.4</platform.version>
</properties>

<dependencies>
    <dependency>
        <groupId>com.google.android</groupId>
        <artifactId>android</artifactId>
        <version>${platform.version}</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

<!-- Deploy to internal maven repository -->
<distributionManagement>
    <repository>
      <id>internal.repo</id>
      <name>Internal Repository</name>
      <url>http://jenkins.internal.com/</url>
    </repository>
</distributionManagement>

<build>
    <plugins>
        <plugin>
            <groupId>com.jayway.maven.plugins.android.generation2</groupId>
            <artifactId>android-maven-plugin</artifactId>
            <version>3.5.3</version>
            <configuration>
                <androidManifestFile>${project.basedir}/AndroidManifest.xml</androidManifestFile>
                <assetsDirectory>${project.basedir}/assets</assetsDirectory>
                <resourceDirectory>${project.basedir}/res</resourceDirectory>
                <nativeLibrariesDirectory>${project.basedir}/src/main/native</nativeLibrariesDirectory>
                <sdk>
                    <platform>16</platform>
                </sdk>
               <undeployBeforeDeploy>true</undeployBeforeDeploy>
            </configuration>
            <extensions>true</extensions>
        </plugin>

        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.5.1</version>
            <configuration>
                <source>1.5</source>
                <target>1.5</target>
            </configuration>
        </plugin>

    </plugins>
</build>
</project>
Run Code Online (Sandbox Code Playgroud)

我打电话 …

maven artifactnotfoundexception

23
推荐指数
3
解决办法
7万
查看次数

为我的服务器提供安全的Facebook身份验证

我想构建一个小型移动应用程序(Android和iOS)和一个带有REST Api的小后端服务器.

我的应用用户(Android或iOS)需要在Facebook上登录.我通过使用facebooks mobile sdk来做到这一点.登录成功后,facebook sdk将返回authentificationToken,现在在用户智能手机上.

这个想法如下:每当我的应用程序需要一些数据时,应用程序将通过HTTPS与我的服务器后端(REST)进行协作.例如:应用程序进行简单的HTTP GET并传递检索到的Facebook authenticationToken.我的服务器获取此facebook authenticationToken并使用此令牌来确定用户是否经过身份验证并检索Facebook个人资料信息(名字,姓氏等).因此,服务器也与facebook联系,并为HTTP GET请求生成个性化响应.

我的问题是:

  1. 是否真的足以为每个REST API调用传递此facebookAuthentication令牌,以使服务器检索正确的关联Facebook用户?
  2. 我使用HTTPS,所以我猜,连接足够加密,对吧?
  3. 我想我需要一些签名机制,所以签署每个REST API调用(通过HTTPS)以确保仅从我的移动应用程序发送facebookAuthentication令牌.我会通过使用带有SHA-1的RSA来签署任何REST API调用.但是这种方法的问题是:客户端需要将私钥存储在App中的某个位置(用于签名请求),服务器知道公钥(用于签名匹配).它是否正确?如果是的话,我认为这是一个很大的安全问题,因为移动应用程序(特别是android)可以被反编译以获取私钥.如何在我的应用程序中安全地存储此私钥?是否有其他可以推荐的签名系统?

Bt:你知道一个适用于iOS和Android的好RSA lib吗?

android facebook rsa digital-signature ios

19
推荐指数
1
解决办法
2952
查看次数