2015-09-01 3 views
1

Это мой код для моего java, потому что когда он расширяется, он не расширяется, чтобы соответствовать всему тексту, поскольку он слишком длинный. Мне нужна помощь, чтобы выяснить, как сделать его расширяемым, чтобы он соответствовал текст.Высота расширяемой высоты

У меня есть 2 Линейное расположение для моего XML

<?xml version="1.0" encoding="utf-8"?> 
 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
 
    android:layout_width="match_parent" 
 
    android:layout_height="match_parent" 
 
    android:orientation="vertical" 
 
    android:weightSum="1"> 
 

 
    <LinearLayout 
 
     android:id="@+id/header" 
 
     android:layout_width="fill_parent" 
 
     android:layout_height="64dp" 
 
     android:layout_marginLeft="15dp" 
 
     android:layout_marginRight="15dp" 
 
     android:layout_marginTop="15dp" 
 
     android:background="#FFF" 
 
     android:orientation="horizontal"> 
 

 
     <TextView 
 
      android:id="@+id/color" 
 
      android:layout_width="@dimen/color_width" 
 
      android:layout_height="@dimen/color_height" 
 
      android:layout_marginBottom="8dp" 
 
      android:layout_marginLeft="8dp" 
 
      android:layout_marginTop="8dp" 
 
      android:background="@drawable/marinabaysandroomicon" 
 
      android:fontFamily="sans-serif-light" 
 
      android:gravity="center_vertical" 
 
      android:text="" 
 
      android:textAlignment="center" 
 
      android:textStyle="bold" /> 
 

 
     <TextView 
 
      android:id="@+id/clickme" 
 
      android:layout_width="wrap_content" 
 
      android:layout_height="wrap_content" 
 
      android:layout_marginLeft="5dp" 
 
      android:fontFamily="sans-serif-light" 
 
      android:gravity="center_vertical" 
 
      android:text="Marina Bay Sand Hotel" 
 
      android:textStyle="bold" /> 
 
    </LinearLayout> 
 

 
    <LinearLayout 
 
     android:id="@+id/expandable" 
 
     android:layout_width="wrap_content" 
 
     android:layout_height="wrap_content" 
 
     android:layout_marginLeft="15dp" 
 
     android:layout_marginRight="15dp" 
 
     android:background="#FFF" 
 
     android:orientation="vertical"> 
 

 
     <TextView 
 
      android:layout_width="wrap_content" 
 
      android:layout_height="wrap_content" 
 
      android:fontFamily="sans-serif-light" 
 
      android:text="To Travel: By Mass Rapid Transit (MRT):4 mins walk from Marina Bay on the North South Line and Circle Line.10 mins walk from Promenade on the Circle Line. Bayfront on the Circle Line and Downtown Line." /> 
 

 
     <TextView 
 
      android:layout_width="wrap_content" 
 
      android:layout_height="wrap_content" 
 
      android:fontFamily="sans-serif-light" 
 
      android:text="To Travel:By public bus:Services 97/97e, 106, 133, 502/502A, 518/518A,NR1 (Available on Fridays, Saturdays and eve of Public Holidays),and NR6 (Available on Fridays, Saturdays and eve of Public Holidays)." 
 
      android:layout_above="@+id/textView7" 
 
      android:layout_alignParentStart="true" /> 
 

 
     <TextView 
 
      android:layout_width="wrap_content" 
 
      android:layout_height="wrap_content" 
 
      android:fontFamily="sans-serif-light" 
 
      android:text="To Travel: By water taxi:Water taxis can be taken from Grand Copthorne Water Front, Raffles Landing Side, Boat Quay, River Side Point and Robertson Quay to Marina Bay Sands.Ticket ranges from 4S$ to 16S$." 
 
      android:layout_above="@+id/textView6" 
 
      android:layout_alignParentStart="true" 
 
      android:id="@+id/textView7" /> 
 

 
     <TextView 
 
      android:layout_width="wrap_content" 
 
      android:layout_height="wrap_content" 
 
      android:fontFamily="sans-serif-light" 
 
      android:text="Rating 4.5/5.0" 
 
      android:id="@+id/textView6" 
 
      android:layout_above="@+id/textView4" 
 
      android:layout_alignParentStart="true" /> 
 

 
     <TextView 
 
      android:layout_width="wrap_content" 
 
      android:layout_height="wrap_content" 
 
      android:fontFamily="sans-serif-light" 
 
      android:text="Address:10 Bayfront Ave, 018956" 
 
      android:id="@+id/textView4" 
 
      android:layout_above="@+id/textView5" 
 
      android:layout_alignParentStart="true" /> 
 

 
     <TextView 
 
      android:layout_width="wrap_content" 
 
      android:layout_height="wrap_content" 
 
      android:fontFamily="sans-serif-light" 
 
      android:text="Price: S$729 - S$5,899 per night" 
 
      android:id="@+id/textView5" 
 
      android:layout_alignParentBottom="true" 
 
      android:layout_alignParentStart="true" /> 
 

 
    </LinearLayout> 
 

 
</LinearLayout>

import android.animation.Animator; 
 
import android.animation.ValueAnimator; 
 
import android.app.Activity; 
 
import android.os.Bundle; 
 
import android.view.View; 
 
import android.view.ViewGroup; 
 
import android.view.ViewTreeObserver; 
 
import android.widget.LinearLayout; 
 

 
public class MainActivity extends Activity { 
 

 
\t LinearLayout mLinearLayout; 
 
\t LinearLayout mLinearLayoutHeader; 
 
\t ValueAnimator mAnimator; 
 
\t 
 
\t @Override 
 
\t protected void onCreate(Bundle savedInstanceState) { 
 
\t \t super.onCreate(savedInstanceState); 
 
\t \t setContentView(R.layout.activity_main); 
 
\t \t 
 
\t \t mLinearLayout = (LinearLayout) findViewById(R.id.expandable); 
 
\t  //mLinearLayout.setVisibility(View.GONE); 
 
\t \t mLinearLayoutHeader = (LinearLayout) findViewById(R.id.header); 
 
\t \t 
 
\t \t //Add onPreDrawListener 
 
\t \t mLinearLayout.getViewTreeObserver().addOnPreDrawListener(
 
       new ViewTreeObserver.OnPreDrawListener() { 
 
      
 
      @Override 
 
      public boolean onPreDraw() { 
 
       mLinearLayout.getViewTreeObserver().removeOnPreDrawListener(this); 
 
       mLinearLayout.setVisibility(View.GONE); 
 
     
 
       final int widthSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); 
 
     \t \t final int heightSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); 
 
     \t \t mLinearLayout.measure(widthSpec, heightSpec); 
 

 
     \t \t mAnimator = slideAnimator(0, mLinearLayout.getMeasuredHeight()); 
 
       return true; 
 
      } 
 
     }); 
 
\t \t 
 
\t \t 
 
\t \t mLinearLayoutHeader.setOnClickListener(new View.OnClickListener() { 
 
    
 
      @Override 
 
      public void onClick(View v) { 
 
       if (mLinearLayout.getVisibility()==View.GONE){ 
 
       \t expand(); 
 
       }else{ 
 
       \t collapse(); 
 
       } 
 
      } 
 
     }); 
 
\t } 
 
\t 
 
\t 
 
\t private void expand() { 
 
\t \t //set Visible 
 
\t \t mLinearLayout.setVisibility(View.VISIBLE); 
 
\t \t 
 
\t \t /* Remove and used in preDrawListener 
 
\t \t final int widthSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); 
 
\t \t final int heightSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); 
 
\t \t mLinearLayout.measure(widthSpec, heightSpec); 
 
\t \t mAnimator = slideAnimator(0, mLinearLayout.getMeasuredHeight()); 
 
\t \t */ 
 
\t \t 
 
\t \t mAnimator.start(); 
 
\t } 
 
\t 
 
\t private void collapse() { 
 
\t \t int finalHeight = mLinearLayout.getHeight(); 
 

 
\t \t ValueAnimator mAnimator = slideAnimator(finalHeight, 0); 
 
\t \t 
 
\t \t mAnimator.addListener(new Animator.AnimatorListener() { 
 
\t \t \t @Override 
 
\t \t \t public void onAnimationEnd(Animator animator) { 
 
\t \t \t \t //Height=0, but it set visibility to GONE 
 
\t \t \t \t mLinearLayout.setVisibility(View.GONE); 
 
\t \t \t } 
 
\t \t \t 
 
\t \t \t @Override 
 
\t \t \t public void onAnimationStart(Animator animator) { 
 
\t \t \t } 
 

 
\t \t \t @Override 
 
\t \t \t public void onAnimationCancel(Animator animator) { 
 
\t \t \t } 
 

 
\t \t \t @Override 
 
\t \t \t public void onAnimationRepeat(Animator animator) { 
 
\t \t \t } 
 
\t \t }); 
 
\t \t mAnimator.start(); 
 
\t } 
 
\t 
 
\t 
 
\t private ValueAnimator slideAnimator(int start, int end) { 
 
\t \t 
 
\t \t ValueAnimator animator = ValueAnimator.ofInt(start, end); 
 
\t \t 
 
\t \t 
 
\t \t animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { 
 
\t \t \t @Override 
 
\t \t \t public void onAnimationUpdate(ValueAnimator valueAnimator) { 
 
\t \t \t \t //Update Height 
 
\t \t \t \t int value = (Integer) valueAnimator.getAnimatedValue(); 
 

 
\t \t \t \t ViewGroup.LayoutParams layoutParams = mLinearLayout.getLayoutParams(); 
 
\t \t \t \t layoutParams.height = value; 
 
\t \t \t \t mLinearLayout.setLayoutParams(layoutParams); 
 
\t \t \t } 
 
\t \t }); 
 
\t \t return animator; 
 
\t } 
 
\t

ответ

1

Если я не неправильно ваш вопрос и ваши необходимости, если вы заполняете эти LinearLayout динамический, вы должны поместить андроид: layou_height = wrap_content.

Таким образом, linearlayout будет расти в зависимости от вида внутри него.

Проверьте это: http://developer.android.com/reference/android/view/ViewGroup.LayoutParams.html

Обновления:

Извините за неправильно понимают ваши макеты не имеют каких-либо проблем просто изменить widthSpec и heightSpec на вашем OnCreate метод:

окончательное ИНТ widthSpec = View.MeasureSpec.makeMeasureSpec (mLinearLayout.getWidth(), View.MeasureSpec.AT_MOST);

final int heightSpec = View.MeasureSpec.makeMeasureSpec (mLinearLayout.getHeight(), View.MeasureSpec.AT_MOST);

Проверьте здесь, что это значение в виду: http://developer.android.com/reference/android/view/View.MeasureSpec.html

Это работало для меня, если у вас есть какие-либо проблемы, пожалуйста обеспечивают некоторые фотографии для увидеть, как отображаются.

+0

Не работает, и все одинаково. Я обновил свой код. –

+0

Thankyou. У меня больше нет проблем. –

Смежные вопросы