小编fal*_*it3的帖子

NestedScrollView和Horizo​​ntal RecyclerView平滑滚动

我有一个垂直的nestedscrollview,其中包含一堆带有水平布局管理器设置的recyclerview.这个想法非常类似于新的谷歌游戏商店的外观.我能够使它起作用,但它根本不光滑.以下是问题:

1)水平回收视图项目大多数时间都无法拦截触摸事件,即使我点击它也是如此.滚动视图似乎优先于大多数动作.我很难在水平运动上找到钩子.这个用户体验令人沮丧,因为我需要在它工作之前尝试几次.如果你检查游戏商店,它能够很好地拦截触摸事件,它只是运作良好.我注意到在游戏商店中他们设置的方式是在一个垂直的回收者视图中的许多水平回收视图.没有滚动视图.

2)水平回收视图的高度必须手动设置,并且没有简单的方法来计算子元素的高度.

这是我正在使用的布局:

<android.support.v4.widget.NestedScrollView
    android:id="@+id/scroll"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:clipToPadding="false"
    android:background="@color/dark_bgd"
    app:layout_behavior="@string/appbar_scrolling_view_behavior">

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

        <LinearLayout
            android:id="@+id/main_content_container"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:visibility="gone"
            tools:visibility="gone"
            android:orientation="vertical">                

                <android.support.v7.widget.RecyclerView
                    android:id="@+id/starring_list"
                    android:paddingLeft="@dimen/spacing_major"
                    android:paddingRight="@dimen/spacing_major"
                    android:layout_width="match_parent"
                    android:layout_height="180dp" />
Run Code Online (Sandbox Code Playgroud)

此UI模式非常基本,很可能在许多不同的应用程序中使用.我已经阅读了许多SO,其中ppl说将列表放在列表中是一个坏主意,但它是一个非常普遍和现代的UI模式在整个地方使用.想看netflix就像界面里面有一系列水平滚动列表垂直清单.有没有一个顺利的方法来实现这一目标?

来自商店的示例图片:

Google Play商店

android horizontal-scrolling android-recyclerview nestedscrollview

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

通过谷歌离线访问Android登录

我正在尝试使用以下指南登录谷歌工作:http : //www.androidhive.info/2014/02/android-login-with-google-plus-account-1/ https://developers.google. COM/+ /移动/安卓/工具入门

登录工作正常,我可以正确登录.现在我需要的下一步是将访问和刷新令牌发送到我的服务器,以便服务器可以访问用户谷歌帐户详细信息(图片/名称等)并将其作为新用户保存在数据库中.

我尝试使用以下代码获取访问令牌:https: //github.com/googleplus/gplus-photohunt-client-android/blob/master/src/com/google/plus/samples/photohunt/auth/AuthUtil.java

当我在这里插入访问令牌时:https: //www.googleapis.com/oauth2/v1/tokeninfo?access_token =

我看到access_type是"在线".我相信为了接收刷新令牌并使其工作,我将需要请求用户离线访问.我不确定如何从上面的指南中的代码中做到这一点.

我怀疑它一定在这里:

// Initializing google plus api client
        mGoogleApiClient = new GoogleApiClient.Builder(this)
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this).addApi(Plus.API, null)
                .addScope(Plus.SCOPE_PLUS_LOGIN).build();
Run Code Online (Sandbox Code Playgroud)

但是我没办法在这里将访问类型设置为脱机.在这一点上,整个过程听起来相当复杂,我希望之前有过这样做的人有一个指南/教程写在某个地方,这使得更容易理解如何让用户登录到您的Android设备并将该用户保存在您的数据库中在您的服务器上,所以他们都是同步的.任何帮助和方向将不胜感激.

编辑1: 在阅读谷歌文档更多,有可能让流程按上述方式运行:https: //developers.google.com/accounts/docs/CrossClientAuth 所有Android应用程序如何处理多个平台上的用户注册?像Android和网站一样?如果我正在尝试的方法是唯一的方法,我会期望更多的资源.或者,如果有另一种替代解决方案,我很想知道.谢谢.

android google-authentication google-login google-oauth

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

Android Listview测量高度

我正在尝试找到一种方法来根据子项的高度设置列表视图的高度.我按照这里给出的解决方案: 如何在不折叠的情况下将ListView放入ScrollView?

public void setListViewHeightBasedOnChildren(ListView listView) {
    ListAdapter listAdapter = listView.getAdapter();
    if (listAdapter == null) {
        // pre-condition
        return;
    }

    int totalHeight = 0;

    for (int i = 0; i < listAdapter.getCount(); i++) {
        View listItem = listAdapter.getView(i, null, listView);

        if(listItem != null){
            listItem.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT));                
            listItem.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
            //listItem.measure(0, 0);
            totalHeight += listItem.getMeasuredHeight();
        }
    }

    ViewGroup.LayoutParams params = listView.getLayoutParams();
    params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
    listView.setLayoutParams(params);
    listView.requestLayout();
}
Run Code Online (Sandbox Code Playgroud)

现在我在listview上调用上面的函数,如下所示:

public void displayReviews(ArrayList<Reviews> resultReviews){
    // Hide …
Run Code Online (Sandbox Code Playgroud)

android android-listview

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