2

Я использую раздвижные вкладки Material Design Sliding Tabs tutorial, но он поддерживает API 16 и выше, но я хочу сделать его совместимым с API 10 и выше.java.lang.NoSuchMethodError: android.widget.TextView.setAllCaps

SlidingTabLayout.class: -

public void setViewPager(ViewPager viewPager) { 
    mTabStrip.removeAllViews(); 

    mViewPager = viewPager; 
    if (viewPager != null) { 
     viewPager.setOnPageChangeListener(new InternalViewPagerListener()); 
     populateTabStrip(); // Line no. - 125 
    } 
} 

/** 
* Create a default view to be used for tabs. This is called if a custom tab view is not set via 
* {@link #setCustomTabView(int, int)}. 
*/ 
protected TextView createDefaultTabView(Context context) { 
    TextView textView = new TextView(context); 
    textView.setGravity(Gravity.CENTER); 
    textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, TAB_VIEW_TEXT_SIZE_SP); 
    textView.setTypeface(Typeface.DEFAULT_BOLD); 
    textView.setLayoutParams(new LinearLayout.LayoutParams(
      ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); 

    TypedValue outValue = new TypedValue(); 
    getContext().getTheme().resolveAttribute(android.R.attr.selectableItemBackground, 
      outValue, true); 
    textView.setBackgroundResource(outValue.resourceId); 
    textView.setAllCaps(true); // Line no. 145 

    int padding = (int) (TAB_VIEW_PADDING_DIPS * getResources().getDisplayMetrics().density); 
    textView.setPadding(padding, padding, padding, padding); 

    return textView; 
} 

private void populateTabStrip() { 
    final PagerAdapter adapter = mViewPager.getAdapter(); 
    final View.OnClickListener tabClickListener = new TabClickListener(); 

    for (int i = 0; i < adapter.getCount(); i++) { 
     View tabView = null; 
     TextView tabTitleView = null; 

     if (mTabViewLayoutId != 0) { 
      // If there is a custom tab view layout id set, try and inflate it 
      tabView = LayoutInflater.from(getContext()).inflate(mTabViewLayoutId, mTabStrip, 
        false); 
      tabTitleView = (TextView) tabView.findViewById(mTabViewTextViewId); 
     } 

     if (tabView == null) { 
      tabView = createDefaultTabView(getContext()); // Line no. - 169 
     } 

     if (tabTitleView == null && TextView.class.isInstance(tabView)) { 
      tabTitleView = (TextView) tabView; 
     } 

     if (mDistributeEvenly) { 
      LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) tabView.getLayoutParams(); 
      lp.width = 0; 
      lp.weight = 1; 
     } 

     tabTitleView.setText(adapter.getPageTitle(i)); 
     tabView.setOnClickListener(tabClickListener); 
     String desc = mContentDescriptions.get(i, null); 
     if (desc != null) { 
      tabView.setContentDescription(desc); 
     } 

     mTabStrip.addView(tabView); 
     if (i == mViewPager.getCurrentItem()) { 
      tabView.setSelected(true); 
     } 

     tabTitleView.setTextColor(getResources().getColorStateList(R.color.selector)); 
     tabTitleView.setTextSize(14); 
    } 
} 

Всякий раз, когда я использую API 10, как минимум, получить:

426-426/samples.exoguru.materialtabs E/AndroidRuntime﹕ FATAL EXCEPTION: main 
java.lang.NoSuchMethodError: android.widget.TextView.setAllCaps 
     at samples.exoguru.materialtabs.SlidingTabLayout.createDefaultTabView(SlidingTabLayout.java:145) 
     at samples.exoguru.materialtabs.SlidingTabLayout.populateTabStrip(SlidingTabLayout.java:169) 
     at samples.exoguru.materialtabs.SlidingTabLayout.setViewPager(SlidingTabLayout.java:125) 
     at samples.exoguru.materialtabs.MainActivity.onCreate(MainActivity.java:56) 
     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663) 
     at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931) 
     at android.os.Handler.dispatchMessage(Handler.java:99) 
     at android.os.Looper.loop(Looper.java:123) 
     at android.app.ActivityThread.main(ActivityThread.java:3683) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:507) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
     at dalvik.system.NativeStart.main(Native Method) 
+1

переход на minSdkVersion 7! – Harry

+0

Вы можете использовать мои скользящие вкладки, если хотите. Совместимость с API 7: https://github.com/ZieIony/Carbon/blob/master/carbon/src/main/java/carbon/widget/PagerTabStrip.java – Zielony

ответ

1

setAllCaps() был добавлен в уровне API 14 (see docs), так что вы не должны назовите его без проверки того, какая версия платформы выполняется.

+0

Большое вам спасибо Marcin – Oreo