Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android

Respuesta
 
Herramientas
  #1  
Viejo 21/10/14, 08:04:40
Array

[xs_avatar]
rafaxplayer rafaxplayer no está en línea
Miembro del foro
 
Fecha de registro: jun 2013
Localización: en la barcelona media
Mensajes: 224
Modelo de smartphone: LG-E610
Tu operador: Orange
problema con CardView

Saludos compañeros , estoy utilizando cardview con recyclerview en una de mis app , pero tengo problemas con el clicklistener y aplicarle un selectable a la cardview , el tema es que los elementos hijos de la card quedan en primer plano y tanto el listener como el selectable que le aplico no funcionan porque anida un par de linerlayout, esto no pasa en los listview de siempre.
este es mi xml:

Código:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"

    android:clickable="false"
    android:orientation="horizontal"
    android:padding="3dp">

    <android.support.v7.widget.CardView xmlns:card_view="http://schemas.android.com/apk/res-auto"
        android:id="@+id/card_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center"
        android:background="@drawable/item_selector"
        android:clickable="true"
        card_view:cardCornerRadius="4dp">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="horizontal"
            android:paddingBottom="5dp"
            android:paddingLeft="10dp"
            android:paddingRight="10dp"
            android:paddingTop="5dp"

            android:focusable="false">

            <LinearLayout
                android:id="@+id/linearLayout1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:orientation="vertical"
                android:padding="2dp">

                <TextView
                    android:id="@+id/textname"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Large Text"
                    android:textAppearance="?android:attr/textAppearanceLarge"
                    android:textColor="#040404"
                    android:textStyle="bold" />

                <TextView
                    android:id="@+id/textType"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Medium Text"
                    android:textAppearance="?android:attr/textAppearanceMedium"
                    android:textColor="#343434" />

                <TextView
                    android:id="@+id/textSize"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Small Text"
                    android:textAppearance="?android:attr/textAppearanceSmall"
                    android:textColor="#343434" />

            </LinearLayout>

            <ImageButton
                android:id="@+id/imageInfo"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@null"
                android:clickable="true"
                android:src="@drawable/ic_action_overflow" />
        </LinearLayout>

    </android.support.v7.widget.CardView>


</LinearLayout>
y este donde esta el listener que como digo funciona pero el problema es que el view esta en ultimo plano y como tiene forma con radius quiero que el selectable y el click se aplique a el y no a los linearlayout hijos:

Código:
 public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
        public TextView txtfile;
        public TextView txttype;
        public TextView txtsize;
        public ImageButton infobtn;

        public ViewHolder(View v) {
            super(v);
            txtfile = (TextView) v.findViewById(R.id.textname);
            txttype = (TextView) v.findViewById(R.id.textType);
            txtsize = (TextView) v.findViewById(R.id.textSize);
            infobtn = (ImageButton) v.findViewById(R.id.imageInfo);
            v.setOnClickListener(this);

        }

        @Override
        public void onClick(View v) {
            Toast.makeText(v.getContext(), "OnItemClick :D", Toast.LENGTH_SHORT).show();
        }

    }
También decir que el imagebutton tiene clicklistener y funciona y ademas no esta en focusable = true ya que esto daba ese tipo de problemas .

Un saludo.

Última edición por rafaxplayer Día 22/10/14 a las 14:40:35.
Responder Con Cita


  #2  
Viejo 22/10/14, 14:46:27
Array

[xs_avatar]
rafaxplayer rafaxplayer no está en línea
Miembro del foro
 
Fecha de registro: jun 2013
Localización: en la barcelona media
Mensajes: 224
Modelo de smartphone: LG-E610
Tu operador: Orange
Bueno en vista del éxito ...XD
he encontrado la solución y la comparto con vosotros , resulta que el cardview este si tiene layout hijos como contenedores entonces no se apaecían los selectores aunque los establezcas como background.
al final mi solucion ha sido aplicar el selector tanto a cardview como la layout hijo y establecer carview como clickable , despues en el layouthijo establecer android:duplicateParentState="true" , con esto el selectable funciona para mi , si sabéis alguna forma menos truquera que esta la compartís.

mi xml ha quedado asi:

Código:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:layout_margin="5dp"
    card_view:cardCornerRadius="5dp"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
android:background="@drawable/item_selector"
    android:id="@+id/card_view"
    android:clickable="true">

    <LinearLayout
        android:focusable="false"
        android:layout_height="match_parent"
        android:layout_width="match_parent"
        android:orientation="horizontal"
        android:background="@drawable/item_selector"
        android:paddingBottom="5dp"
        android:paddingLeft="10dp"
        android:paddingRight="10dp"
        android:paddingTop="5dp"

        android:duplicateParentState="true">

        <LinearLayout
            android:id="@+id/linearLayout1"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:layout_width="wrap_content"
            android:orientation="vertical"
            android:padding="2dp">

            <TextView
                android:id="@+id/textname"
                android:layout_height="wrap_content"
                android:layout_width="wrap_content"
                android:text="Large Text"
                android:textAppearance="?android:attr/textAppearanceLarge"
                android:textColor="#040404"
                android:textStyle="bold" />

            <TextView
                android:id="@+id/textType"
                android:layout_height="wrap_content"
                android:layout_width="wrap_content"
                android:text="Medium Text"
                android:textAppearance="?android:attr/textAppearanceMedium"
                android:textColor="#343434" />

            <TextView
                android:id="@+id/textSize"
                android:layout_height="wrap_content"
                android:layout_width="wrap_content"
                android:text="Small Text"
                android:textAppearance="?android:attr/textAppearanceSmall"
                android:textColor="#343434" />

        </LinearLayout>

        <ImageButton
            android:background="@null"
            android:clickable="true"
            android:id="@+id/imageInfo"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:src="@drawable/ic_action_overflow" />
    </LinearLayout>

</android.support.v7.widget.CardView>
Responder Con Cita
Los siguientes 2 usuarios han agradecido a rafaxplayer su comentario:
Respuesta

Estás aquí
Regresar   Portal | Indice > Todo sobre Android > Programación y Desarrollo para Android



Hora actual: 19:55:36 (GMT +2)



User Alert System provided by Advanced User Tagging (Lite) - vBulletin Mods & Addons Copyright © 2025 DragonByte Technologies Ltd.

Contactar por correo / Contact by mail / 邮件联系 /