Alternative method for TextView.getMaxLines () for Android 4.0.3 (API 15) and below

I fall under crash logs when using the getMaxLines() method of Texview on Ice Cream Sandwich Android 4.0.3 version,

So, I realized that my application has a lower sdk that does not have this getMaxLines () method.

How to remove this failure. I did not find alternative methods

 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) 
+5
source share
2 answers

getMaxLines () TextViewCompat looks like the right solution for this.

You can also look in SourceCode in TextViewCompat and copy the functions you need.

Code:

 int maxLines = TextViewCompat.getMaxLines(yourtextView); 

instead:

 int maxLines = yourtextView.getMaxLines(); 

I highly recommend using lib and TextViewCompat support. But just for completeness, there is also a (current) source 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; } 
+8
source

Try it, it can help,

  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)); } 
0
source

Source: https://habr.com/ru/post/1237832/


All Articles