我已经阅读了这个链接中的信息:
Use Tab with new ToolBar (AppCompat v7-21),并做了大量的研究.
但问题是SlidingTabLayout项目正在使用Gradle构建文件和结构.我想使用eclipse添加选项卡布局.我该如何做?
我在Android Studio中运行了SlidingTabLayout项目.但是如何在V7:21中添加Tabs到工具栏?
注意:
所有这一切都需要在现有的项目中完成,该项目具有一切设置,并向API中提供了ActionBar.setNavigationMode等已弃用的API的警告
解决方法
1.从
https://developer.android.com/samples/SlidingTabsColors/src/com.example.android.common/view/SlidingTabLayout.html复制SlidingTabLayout.java并将其粘贴到您的包中.
MainActivity.java
package com.example.mysliding; import com.example.android.common.view.SlidingTabLayout; import com.example.mysliding.SlidingTabsBasicFragment.SamplePagerAdapter; import android.support.v4.app.FragmentTransaction; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.support.v7.app.ActionBarActivity; import android.support.v7.widget.Toolbar; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; public class MainActivity extends ActionBarActivity { static final String LOG_TAG = "SlidingTabsBasicFragment"; private SlidingTabLayout mSlidingTabLayout; private ViewPager mViewPager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.fragment_sample); Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar); mViewPager = (ViewPager) findViewById(R.id.viewpager); mViewPager.setAdapter(new SamplePagerAdapter()); mSlidingTabLayout = (SlidingTabLayout) findViewById(R.id.sliding_tabs); mSlidingTabLayout.setViewPager(mViewPager); /* * FragmentTransaction transaction = * getSupportFragmentManager().beginTransaction(); * SlidingTabsBasicFragment fragment = new SlidingTabsBasicFragment(); * transaction.replace(R.id.sample_content_fragment,fragment); * transaction.commit(); */ } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main,menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button,so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } class SamplePagerAdapter extends PagerAdapter { /** * @return the number of pages to display */ @Override public int getCount() { return 5; } /** * @return true if the value returned from * {@link #instantiateItem(ViewGroup,int)} is the same object * as the {@link View} added to the {@link ViewPager}. */ @Override public boolean isViewFromObject(View view,Object o) { return o == view; } // BEGIN_INCLUDE (pageradapter_getpagetitle) /** * Return the title of the item at {@code position}. This is important * as what this method returns is what is displayed in the * {@link SlidingTabLayout}. * <p> * Here we construct one using the position value,but for real * application the title should refer to the item's contents. */ @Override public CharSequence getPageTitle(int position) { return "Item " + (position + 1); } // END_INCLUDE (pageradapter_getpagetitle) /** * Instantiate the {@link View} which should be displayed at * {@code position}. Here we inflate a layout from the apps resources * and then change the text view to signify the position. */ @Override public Object instantiateItem(ViewGroup container,int position) { // Inflate a new layout from our resources View view = getLayoutInflater().inflate(R.layout.pager_item,container,false); // Add the newly created View to the ViewPager container.addView(view); // Retrieve a TextView from the inflated View,and update it's text TextView title = (TextView) view.findViewById(R.id.item_title); title.setText(String.valueOf(position + 1)); Log.i(LOG_TAG,"instantiateItem() [position: " + position + "]"); // Return the View return view; } /** * Destroy the item from the {@link ViewPager}. In our case this is * simply removing the {@link View}. */ @Override public void destroyItem(ViewGroup container,int position,Object object) { container.removeView((View) object); Log.i(LOG_TAG,"destroyItem() [position: " + position + "]"); } }
}
fragment_sample.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.support.v7.widget.Toolbar xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/my_awesome_toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:minHeight="?attr/actionBarSize" app:theme="@style/ThemeOverlay.AppCompat.ActionBar"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <com.example.android.common.view.SlidingTabLayout android:id="@+id/sliding_tabs" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout> </android.support.v7.widget.Toolbar> <android.support.v4.view.ViewPager android:id="@+id/viewpager" android:layout_width="match_parent" android:layout_height="0px" android:layout_weight="1" android:background="@android:color/white" /> </LinearLayout>
Pager_item.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:gravity="center"> <TextView android:id="@+id/item_subtitle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge" android:text="Page:"/> <TextView android:id="@+id/item_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="80sp" /> </LinearLayout>