Альтернативный метод TextView.getMaxLines() для Android 4.0.3 (API 15) и ниже

Я получаю ниже журналы сбоев при использовании метода getMaxLines() Texview на версии Ice Cream Sandwich Android 4.0.3,

Итак, я понял, что реальная проблема заключается в том, что мое приложение работает с более низким SDK, в котором нет этого метода getMaxLines().

Как можно убрать этот сбой. Я не нашел альтернативы методу

java.lang.NoSuchMethodError: android.widget.TextView.getMaxLines
            at com.text.mobile.new.adapters.ServiceListAdapter.onBindViewHolder(ServiceListAdapter.java:232)
            at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:5277)
            at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:5310)
            at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4568)
            at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4461)
            at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:1962)
            at android.support.v7.widget.GridLayoutManager.layoutChunk(GridLayoutManager.java:438)
            at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1334)
            at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:563)
            at android.support.v7.widget.GridLayoutManager.onLayoutChildren(GridLayoutManager.java:171)
            at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:2847)
            at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3145)
            at android.view.View.layout(View.java:11278)
            at android.view.ViewGroup.layout(ViewGroup.java:4224)
            at android.widget.RelativeLayout.onLayout(RelativeLayout.java:925)
            at android.view.View.layout(View.java:11278)
            at android.view.ViewGroup.layout(ViewGroup.java:4224)
            at android.widget.RelativeLayout.onLayout(RelativeLayout.java:925)
            at android.view.View.layout(View.java:11278)
            at android.view.ViewGroup.layout(ViewGroup.java:4224)
            at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1628)
            at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1486)
            at android.widget.LinearLayout.onLayout(LinearLayout.java:1399)
            at android.view.View.layout(View.java:11278)
            at android.view.ViewGroup.layout(ViewGroup.java:4224)
            at android.widget.FrameLayout.onLayout(FrameLayout.java:431)
            at android.view.View.layout(View.java:11278)
            at android.view.ViewGroup.layout(ViewGroup.java:4224)
            at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1628)
            at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1486)
            at android.widget.LinearLayout.onLayout(LinearLayout.java:1399)
            at android.view.View.layout(View.java:11278)
            at android.view.ViewGroup.layout(ViewGroup.java:4224)
            at android.widget.FrameLayout.onLayout(FrameLayout.java:431)
            at android.view.View.layout(View.java:11278)
            at android.view.ViewGroup.layout(ViewGroup.java:4224)
            at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1489)
            at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2442)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:4424)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
            at dalvik.system.NativeStart.main(Native Method)

person Lavekush Agrawal    schedule 10.12.2015    source источник
comment
Нашел что-то подобное, проверьте это stackoverflow.com/questions/16255480/   -  person Raghavendra    schedule 10.12.2015


Ответы (2)


getMaxLines() of TextViewCompat выглядит подходящим решением для этого.

Вы также можете посмотреть в SourceCode TextViewCompat и скопируйте нужные функции.

Код:

int maxLines = TextViewCompat.getMaxLines(yourtextView);

вместо:

int maxLines = yourtextView.getMaxLines();

Я настоятельно рекомендую использовать библиотеку поддержки и TextViewCompat. Но только для полноты, вот также (текущий) источник TextViewCompatDonut getMaxLines :

static int getMaxLines(TextView textView) {
        if (!sMaxModeFieldFetched) {
            sMaxModeField = retrieveField("mMaxMode");
            sMaxModeFieldFetched = true;
        }
        if (sMaxModeField != null && retrieveIntFromField(sMaxModeField, textView) == LINES) {
            // If the max mode is using lines, we can grab the maximum value
            if (!sMaximumFieldFetched) {
                sMaximumField = retrieveField("mMaximum");
                sMaximumFieldFetched = true;
            }
            if (sMaximumField != null) {
                return retrieveIntFromField(sMaximumField, textView);
            }
        }
        return -1;
    }
person daemmie    schedule 10.12.2015
comment
Большое спасибо, но мой компилятор не нашел getMaxLines и в TextViewCompat, - person Lavekush Agrawal; 10.12.2015
comment
@LavekushAgrawal Возможно, вам придется обновить свою библиотеку поддержки. - person daemmie; 10.12.2015
comment
Я также обновил свою библиотеку поддержки, но компилятор все еще не нашел getMaxLines в TextViewAppCompact. - person Lavekush Agrawal; 10.12.2015
comment
Давайте продолжим обсуждение в чате. - person Lavekush Agrawal; 10.12.2015

Попробуйте это, может поможет,

      TextView t1 = (TextView) findViewById(R.id.txt1);

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
           int no= t1.getMaxLines();
            Log.e("No of Lines: ", String.valueOf(no));
        }
person User_1191    schedule 10.12.2015