【问题标题】:Remove focus from recyclerview inside Nested Scrollview从嵌套滚动视图内的回收器视图中删除焦点
【发布时间】:2016-02-14 17:15:02
【问题描述】:

您好,我在设计时面临一个问题,其 xml 如下。问题是我在嵌套滚动视图中使用了两个文本视图、按钮和回收器视图。当我运行此代码视图时,从 recyclerview 开始,但是当我向下滚动时,那些 textview,button 是可见的。请帮助我如何从第一个视图开始查看,并避免在移动设备内显示视图时直接关注 recyclerview。我怎么解决这个问题?帮我。对不起我的英语不好。

<android.support.v4.widget.NestedScrollView
             android:layout_width="fill_parent"
             android:layout_height="fill_parent"
        android:descendantFocusability="beforeDescendants"
        android:focusableInTouchMode="false">

                    <LinearLayout
                        android:id="@+id/llMainContainer"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:orientation="vertical"
                        android:padding="@dimen/padding_10">

                        <com.xyz.ui.widget.CustomEditTextView
                            android:id="@+id/etEmail"
                            style="@style/Widget.xyz.EditText"
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:hint="@string/order_mobile_number"
                            android:inputType="text"
                            app:fontTextStyle="3" />

                        <LinearLayout
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:orientation="horizontal"
                            android:weightSum="2">

                            <com.xyz.ui.widget.CustomEditTextView
                                android:id="@+id/etDateFrom"
                                style="@style/Widget.xyz.EditText"
                                android:layout_width="match_parent"
                                android:layout_height="wrap_content"
                                android:layout_marginTop="@dimen/spacing_normal"
                                android:layout_weight="1"
                                android:drawableLeft="@drawable/ic_calendar"
                                android:drawablePadding="@dimen/spacing_normal"
                                android:drawableStart="@drawable/ic_calendar"
                                android:editable="false"
                                android:focusable="false"
                                android:hint="@string/date_from"
                                android:inputType="text"
                                app:fontTextStyle="3" />

                            <com.xyz.ui.widget.CustomEditTextView
                                android:id="@+id/etDateTo"
                                style="@style/Widget.xyz.EditText"
                                android:layout_width="match_parent"
                                android:layout_height="wrap_content"
                                android:layout_marginLeft="@dimen/margin_left_10"
                                android:layout_marginStart="@dimen/margin_left_10"
                                android:layout_marginTop="@dimen/spacing_normal"
                                android:layout_weight="1"
                                android:drawableLeft="@drawable/ic_calendar"
                                android:drawablePadding="@dimen/spacing_normal"
                                android:drawableStart="@drawable/ic_calendar"
                                android:editable="false"
                                android:focusable="false"
                                android:hint="@string/date_to"
                                android:inputType="text"
                                app:fontTextStyle="3" />
                        </LinearLayout>

                        <com.xyz.ui.widget.CustomTextView
                            android:id="@+id/txtGenerate"
                            style="@style/Theme.xyz.Button"
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:layout_marginTop="@dimen/spacing_normal"
                            android:text="@string/generate_report"
                            android:textAllCaps="false"
                            app:fontTextStyle="1" />

                        <android.support.v7.widget.RecyclerView
                            android:id="@+id/rvPendingOrders"
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:layout_marginTop="@dimen/spacing_micro" />

                    </LinearLayout>

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

【问题讨论】:

  • @Schwertfisch 我解决了这个问题。
  • 怎么样?我好像也遇到了类似的问题,请问你的解决方法可以吗?

标签: android android-layout android-recyclerview androiddesignsupport android-nestedscrollview


【解决方案1】:

我按照以下方式管理我的代码,它对我来说运行良好。看看完整的布局代码:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:descendantFocusability="beforeDescendants"
    android:focusableInTouchMode="false"
    android:orientation="vertical"
    tools:context=".order.Order">
    <LinearLayout
        android:id="@+id/headerbar"
        style="@style/HeaderBar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:clickable="true"
        android:orientation="vertical"
        android:visibility="visible">

        <include layout="@layout/toolbar_actionbar" />
        <!-- placeholder, empty except on L -->
    </LinearLayout>

    <android.support.v4.widget.DrawerLayout
        android:id="@+id/drawer_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="false">
        <!-- Main layout -->
        <FrameLayout
            android:id="@+id/main_content"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:clipChildren="false"
            app:shadowDrawable="@drawable/header_shadow">

            <android.support.v4.widget.NestedScrollView
                android:layout_width="fill_parent"
                android:layout_height="fill_parent">

                <LinearLayout
                    android:id="@+id/llMainContainer"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:orientation="vertical"
                    android:padding="@dimen/padding_10">

                    <EditTextView
                        android:id="@+id/etEmail"
                        style="@style/Widget.xyz.EditText"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:hint="@string/order_mobile_number"
                        android:imeOptions="actionDone"
                        android:inputType="text"
                        app:fontTextStyle="3" />

                    <LinearLayout
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:orientation="horizontal"
                        android:weightSum="2">

                        <EditTextView
                            android:id="@+id/txtDateFrom"
                            style="@style/Widget.xyz.EditText"
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:layout_marginTop="@dimen/spacing_normal"
                            android:layout_weight="1"
                            android:drawableLeft="@drawable/ic_calendar"
                            android:drawablePadding="@dimen/spacing_normal"
                            android:text="@string/date_from"
                            android:focusable="false"
                            android:editable="false"
                            app:fontTextStyle="3" />

                        <EditTextView
                            android:id="@+id/txtDateTo"
                            style="@style/Widget.xyz.EditText"
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:layout_marginLeft="@dimen/margin_left_10"
                            android:layout_marginTop="@dimen/spacing_normal"
                            android:layout_weight="1"
                            android:drawableLeft="@drawable/ic_calendar"
                            android:drawablePadding="@dimen/spacing_normal"
                            android:focusable="false"
                            android:editable="false"
                            android:text="@string/date_to"
                            app:fontTextStyle="3" />
                    </LinearLayout>

                    <TextView
                        android:id="@+id/txtGenerate"
                        style="@style/Theme.xyz.Button"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginTop="@dimen/spacing_normal"
                        android:text="@string/generate_report"
                        android:textAllCaps="false"
                        app:fontTextStyle="1" />

                    <android.support.v7.widget.RecyclerView
                        android:id="@+id/rvPendingOrders"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginTop="@dimen/spacing_micro" />

                </LinearLayout>

            </android.support.v4.widget.NestedScrollView>
        </FrameLayout>
        <!-- Nav drawer -->
        <include layout="@layout/navdrawer" />
    </android.support.v4.widget.DrawerLayout>
</LinearLayout>

【讨论】:

  • 它也对我有用。谢谢,但我有时会遇到问题,所以请看一下...
【解决方案2】:

使用 EditText 作为 NestedScrollView 中的第一个元素可能会对您有所帮助。

    <android.support.v4.widget.NestedScrollView 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:background="@color/colorPrimary"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">

        <LinearLayout 
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@drawable/blur"
            android:orientation="vertical">

            <EditText
                android:layout_width="0px"
                android:layout_height="0px"
                android:focusable="true"
                android:focusableInTouchMode="true" />

                <android.support.v7.widget.RecyclerView
                    android:id="@+id/itemsHolder"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content" />
        </LinearLayout>
    </android.support.v4.widget.NestedScrollView>

注意:启动活动时必须隐藏键盘

【讨论】:

    【解决方案3】:

    添加

    android:descendantFocusability="blocksDescendants"
    

    在这样的LinearLayout里面

    <android.support.v4.widget.NestedScrollView 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"
            app:layout_behavior="@string/appbar_scrolling_view_behavior">
    
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:descendantFocusability="blocksDescendants"
                android:orientation="vertical">
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-02-08
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      • 2017-01-14
      • 1970-01-01
      相关资源
      最近更新 更多