android - 将焦点限制在具有多个添加 fragment 的容器中的一个 fragment 上-LMLPHP 我有多个使用同一个容器的 fragment ,当一个 fragment 添加到另一个 fragment 上时,我希望焦点仅在最近添加的 fragment 中的 View 之间移动。我尝试使用 onBackstackChangeListener() 解决它,但它似乎不起作用。如图所示,我只想关注 Pin Entry Fragment,但焦点也转移到 Pin Entry Fragment 后面的 fragment 上的“Enter”按钮上。请帮忙。

最佳答案

我找到了解决此问题的方法,但这不是真正的解决方案,最佳答案将被标记为正确答案。

解决方法:
在您的布局周围添加需要焦点的 View 。例如:

<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:layout_gravity="center"
    android:orientation="horizontal"/>
<View
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:focusable="true"
        android:id="@+id/left_view"/>
<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal">
<TextView
                android:id="@+id/buyOrWatch"
                android:layout_width="90dp"
                android:layout_height="30dp"
                android:layout_margin="5dp"
                android:background="@drawable/movie_buy_selector"
                android:focusable="true"
                android:gravity="center"
                android:text="@string/buy"
                android:textColor="@color/color_white" />

            <TextView
                android:id="@+id/preview"
                android:layout_width="90dp"
                android:layout_height="30dp"
                android:layout_margin="5dp"
                android:layout_marginTop="15dp"
                android:background="@drawable/movie_buy_selector"
                android:focusable="true"
                android:gravity="center"
                android:text="@string/preview"
                android:textColor="@color/color_white" />
        </LinearLayout>

 <View
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:focusable="true"
            android:id="@+id/right_view"/>

我将布局与 textviews 放在两个具有 0dp 宽度的可聚焦 View 之间。
现在,在您的 fragment 类中,绑定(bind)这些 View ,然后为这些 View 定义一个 focusChangeListener()。例如,如果 leftView 将 View 与 id android:id="@+id/left_view"buyOrWatch 与具有 TextViewandroid:id="@+id/buyOrWatch" 绑定(bind),那么,
 leftView.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View view, boolean hasFocus) {
                if(hasFocus){
                    buyOrWatch.requestFocus();
                }
            }
        });

您可以像上面一样为每个 View 定义类似的焦点更改监听器,然后只要 fragment 可见,焦点就会留在 fragment 中。希望这可以帮助某人。

关于android - 将焦点限制在具有多个添加 fragment 的容器中的一个 fragment 上,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47504002/

10-12 00:24
查看更多