2017-07-10 6 views
0

Ich arbeite an Erweiterung und Zusammenbruch der Eigenschaften auf CardView.Erweiterbare Höhe von CardView

public class SimpleCardView extends CardView { 
private int animationDuration; 


    public SimpleCardView(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 
    } 

    public SimpleCardView(Context context) { 
     super(context); 
    } 

    public SimpleCardView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public void expand(){ 
     final int initialHeight = getHeight(); 
     final float scale = getContext().getResources().getDisplayMetrics().density; 
     int targetHeight = (int) (232 * scale + 0.5f); 
     final int distance_to_expand = targetHeight - initialHeight; 
     Animation animation = new Animation() { 
      @Override 
      protected void applyTransformation(float interpolatedTime, Transformation t) { 
       getLayoutParams().height = (int) (initialHeight +(distance_to_expand*interpolatedTime)); 
       requestLayout(); 
      } 

      @Override 
      public boolean willChangeBounds() { 
       return true; 
      } 
     }; 
     animationDuration = distance_to_expand; 
     animation.setDuration((long)distance_to_expand); 
     startAnimation(animation); 
    } 

    public int getAnimationTime(){ 
     return animationDuration; 
    } 

    public void collapse(){} 

} 

Das ist mein Screenshot:

enter image description here

ich den konstanten Wert für die Zielhöhe setze.

int targetHeight = (int) (232 * scale + 0.5f); 

Hier ist ein expandierbares targetHeight Höhe CardView. Aus diesem Grund, wenn der Inhalt zu lang ist, wird nur ein kleiner Teil des Inhalts angezeigt.

Gibt es eine Möglichkeit, diese Höhe dynamisch nicht einen konstanten Wert zu setzen?

+0

Einfache Lösung bro. Stellen Sie CardView height ein wrap_content setYour Titel Wie Sie tun und unten TextView Content Visibility sollte gegangen.So wenn Sie für Expand klicken Sie einfach versuchen, sichtbar die TextView, die Inhalt enthält. –

+0

Es ist eine gute Idee, die Sichtbarkeit der Ansicht sichtbar zu machen. Im Moment mache ich es nicht so. Also, gibt es eine Möglichkeit, diese Zielhöhe dynamisch zu machen. –

Antwort

0

Haben Sie versucht, mit: wrap_content

android:layout_height="wrap_content" 

<android.support.v7.widget.CardView 
android:id="@+id/cardView" 
android:layout_width="match_parent" 
android:layout_height="wrap_content"> 

Und Sie brauchen SimpleCardView statische Höhe Formularklasse zu entfernen.

** oder Sie benötigen Höhe berechnen **

Dazu Sie Text in TextView und dann berechnen Höhe von TextView Mit Unter den Linien festlegen müssen und dann gehen in SimpleCardView durch die Setter-Methode zu machen.

TextView textview ; 

textveiw.setText("your text"); 
textview.mesure(0,0); 
int height = textview.getMesuredHeight(); 
+0

Ja, das habe ich schon. –

+0

funktioniert das? –

+0

Gibt es eine Möglichkeit, die Höhe dort dynamisch in 'SimpleCardView' Klasse als' WRAP_CONTENT' zu setzen. –