У меня есть представление ресайклера, и для его строки установлено значение (focusable = "true"), чтобы я мог анимировать его строку с помощью элементов управления d-pad на фокусе, который отлично работает. Но когда я нажимаю ввод, он не обнаруживает щелчок по ресайклеру дочерний элемент представления, который раздражает.
Мой код просмотра ресайклера:
<android.support.v7.widget.RecyclerView
android:id="@+id/featuredRecyclerView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#000000"
android:focusable="false"
android:clipChildren="false"
>
</android.support.v7.widget.RecyclerView>
Мой макет строки RecyclerView:
<com.open.androidtvwidget.leanback.widget.OpenCardView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/card"
android:background="@color/white"
android:clipChildren="false"
android:clipToPadding="false"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:focusable="true"
android:layout_marginRight="10dp"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:descendantFocusability="beforeDescendants"
>
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:focusable="false"
>
<ImageView
android:id="@+id/ivMovie"
android:layout_width="100dp"
android:layout_height="150dp"
android:scaleType="centerCrop"
android:background="@color/placeholder"
android:focusable="false"
android:focusableInTouchMode="false"
/>
<RelativeLayout
android:id="@+id/footer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/linear_gradiant"
android:layout_alignRight="@+id/ivMovie"
android:layout_alignLeft="@+id/ivMovie"
android:layout_alignBottom="@+id/ivMovie">
<TextView
android:id="@+id/runtime_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="1m"
android:textColor="#ffffff"
android:textSize="16sp"
android:layout_centerVertical="true"
android:layout_alignParentRight="true"
android:gravity="center"
android:layout_marginRight="3dp"
/>
</RelativeLayout>
</RelativeLayout>
</com.open.androidtvwidget.leanback.widget.OpenCardView>
Мой адаптер onBindViewHolder:
public void onBindViewHolder(MyViewHolder holder, final int position) {
holder.ivMovie.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent go = new Intent(mContext,LoginActivity.class);
go.putExtra("movie", movie);
mContext.startActivity(go);
}
});
holder.card.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
v.animate().scaleX(1.2f).scaleY(1.2f).setDuration(300).start();
v.setElevation(20);
} else {
v.animate().scaleX(1.0f).scaleY(1.0f).setDuration(300).start();
v.setElevation(0);
}
}
});
}
PS: я перепробовал все возможности focusable="true/false", focusableInTouchMode="true/false", clickable="true/false" и android:descendantFocusability везде.