رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
ExpandableTextView
#1
گاهی وقتا می بینیم که فقط 2 الی 3 خط ار یک نوشته ی طولانی نمایش داده شده و در آخر ... قرار داده شده . که باز زدن روی این سه نقطه می تونیم بقیه ی نوشته رو در همون صفحه و با افکت قشنگی زیر نوشته ی قبلی و در ادامش ببینم . یعنی یه حالت کولاپس مانند.


کتابخانه های زیادی در این رابطه وجود دارند ولی ما در اینجا بدون نیاز به کتابخونه این تکست ویو رو کاستوم سازی می کنیم :)

در اولین قدم: یک کلاس جاوا بسازید که از "android.support.v7.widget.AppCompatTextView" مشتق شده باشه و بعد از وارد کردن متد های مرتبط و کد های لازم این کلاس رو کامل کنید.

قدم دوم : در لایه ی xml خود در جایی که قرا هست تکست ویو رو پیاده کنید , یک تگ از همون کلاس که از تکست ویو مشتق شده بود رو باز کنید و کدهای مرتبط با تکست ویوتون در اون قرار بدید.
قدم سوم : در کلاسی که مربوط به اون لی اوت هست , بعد از گرفتن تکست ویو , می تونید یک رشته ی طولانی تعریف کنید یا اینکه این رشته رو از json بگیرید و ...و بعد از اون اون متد setText رو برای این تکست ویو صدا بزنید و این رشته رو بهش پاس بدید.
همین ! موفق باشید :)
پاسخ
تشکر شده توسط:
#2
برای پیاده سازی همچین کاستومی بدون کتابخانه , نیاز به یک کلاس هست که از  android.support.v7.widget.AppCompatTextView مشتق شده باشد و کد های لازم را در آن قرار می دهیم . این کلاس را می توانید بدون تغییر در کد های خود قرار دهید. Smile

ExpandableTextView.java
import android.content.Context;
import android.content.res.TypedArray;
import android.support.annotation.Nullable;
import android.text.SpannableStringBuilder;
import android.util.AttributeSet;
import android.view.View;
import android.widget.TextView;

import sanaebadi.ir.tandorosti.R;

public class ExpandableTextView extends android.support.v7.widget.AppCompatTextView {

  private static final int DEFAULT_TRIM_LENGTH =400;
  private static final String ELLIPSIS = "...";


  private CharSequence originalText;
  private CharSequence trimmedText;
  private BufferType bufferType;
  private boolean trim = true;
  private int trimLength;


  public ExpandableTextView(Context context) {
    super(context, null);
  }

  public ExpandableTextView(Context context, @Nullable AttributeSet attrs) {
    super(context, attrs);

    TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.ExpandableTextView);
    this.trimLength = typedArray.getInt(R.styleable.ExpandableTextView_trimLength, DEFAULT_TRIM_LENGTH);
    typedArray.recycle();

    setOnClickListener(new OnClickListener() {
      @Override
      public void onClick(View v) {
        trim = !trim;
        setText();
        requestFocusFromTouch();
      }
    });
  }

  private void setText() {
    super.setText(getDisplayableText(), bufferType);
  }

  private CharSequence getDisplayableText() {
    return trim ? trimmedText : originalText;
  }

  @Override
  public void setText(CharSequence text, BufferType type) {
    originalText = text;
    trimmedText = getTrimmedText(text);
    bufferType = type;
    setText();
  }

  private CharSequence getTrimmedText(CharSequence text) {
    if (originalText != null && originalText.length() > trimLength) {
      return new SpannableStringBuilder(originalText, 0, trimLength + 1).append(ELLIPSIS);
    } else {
      return originalText;
    }
  }

  public CharSequence getOriginalText() {
    return originalText;
  }

  public void setTrimLength(int trimLength) {
    this.trimLength = trimLength;
    trimmedText = getTrimmedText(originalText);
    setText();
  }

  public int getTrimLength() {
    return trimLength;
  }
}


2. قدم بعدی ایجاد یک لی اوت هست که در ان یک تگ از جنس کلاس کاستومی که از TextView مشتق شده بود  رو اضافه می کنیم .

activity_main.xml


<android.support.v7.widget.CardView
    android:id="@+id/third_card"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@+id/second_card"
    android:layout_marginBottom="2dp"
    android:layout_marginEnd="12dp"
    android:layout_marginStart="12dp"
    android:layout_marginTop="10dp"
    android:background="@color/cardview_light_background"
    app:cardCornerRadius="2dp">

    <sanaebadi.ir.tandorosti.manage.ExpandableTextView
        android:id="@+id/txt_see_more"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        android:padding="6dp"
        android:textColor="@color/primaryText"
        android:textSize="@dimen/check_text"
        android:textStyle="bold" />
</android.support.v7.widget.CardView>


 3. و در آخر هم لی اوت خود را به اکتیویتی مورد نظرش متصل می کنیم و اون کامپونتت رو گرفته و به اون یک تکست اختصاص می دیم. ایت تکست می تونه از سرور بیاد یا اینکه از لوکال داده شه !

MainActivity.java
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        TextView txt_see_more = (TextView)findViewById(R.id.txt_see_more);
        
        String myText="رب انار ارگانیک 330 گرمی نارنی (Narni Organic Pomegranate Molasses 330gr) انار درختی کوچکی است که ارتفاع آن تا 6 متر می رسد. این درخت بومی ایران و مناطق مجاور آن است و معمولاً در مناطق نیمه گرمسیری می روید. میوه این درخت حاوی مقدار زیادی ویتامین C، اسیدهای آلی و مواد قندی است که مصرف آن برای سلامت بدن بسیار سودمند می باشد. حتی از ریشه و ساقه درخت انار به دلیل ترکیبات تاننی و آلکالوئیدش، برای رفع انگل های روده استفاده می کنند. همچنین از انار برای درمان ورم های داخلی بدن از جمله ورم کبد، کلیه و سایر اجزای سیستم گوارشی بسیار مفید است. از میوه انار محصولات و فراورده های بسیار زیادی تولید می شود. از جمله میتوان به رب انار، آب انار، لواشک انار، مربای انار اشاره داشت. رب انار ترکیبی از آب انار، شکر و آبلیمو است که خواص مشابه به آب انار را دارا می باشد. از این رو رب انار به عنوان بهترین چاشنی تقویتی برای کلیه ها و سیستم گوارشی می توان در غذا استفاده کرد. همچنین آنتی اکسیدان فراوان در رب انار موجب کاهش استرس، کاهش فشار خون و پیشگیری از سرطان و تقویت سیستم ایمنی بدن نقش بسیار موثر می شود. جدول زیر ارزش غذایی 100 گرم رب انار را نشان می دهد. ارزش غذایی 100 گرم رب انار انرژی 290 انرژی کربوهیدرات 74.7 گرم چربی 0.1 گرم کلسیم 205 میلی گرم آهن 4.7 میلی گرم منزیم 242 میلی گرم فسفر 31 میلی گرم پتاسیم 1.4 میلی گرم سدیم 37 میلی گرم روی 0.3 میلی گرم منگز 1.5 میلی گرم   از جمله فواید دیگر رب انار می توان به موارد زیر اشاره کرد: پیشگیری از سرطان تقویت سیستم ایمنی بدن کاهش سطح کلسترول خون رشد ذهنی جنین در دوران بارداری مضرات:  افرادی که مزاج سرد دارند در خوردن رب انار افراط نکنند. این افراد با زیاده روی در مصرف رب انار دچار سستی معده و نفخ می شوند. گواهینامه ها:  استاندارد ارگانیک اتحادیه اروپا";
        
        txt_see_more.setText(myText);
      
    }
}
 
این یک افکت زیبا بدون کتابخونه هست. می تونید استفاده کنید. موفق باشید. Heart
پاسخ
تشکر شده توسط:




کاربران در حال بازدید این موضوع: 1 مهمان