ActionBar标签获得不同的宽度

时间:2016-12-14 17:09:16

标签: android android-fragments android-tabs

我正在尝试实现将片段带入项目的一个活动中的选项卡。问题是标签在不同的设备上占据不同的宽度尺寸。

示例(nexus 7):标签不占据全宽nexus 7

示例2(galaxy s5):标签可水平滚动,因此它们占据的角度超过了操作栏的全宽enter image description here

  

SecondActivity.java:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_second);

    mViewPager = (ViewPager) findViewById(R.id.pager);
    mActionBar = getActionBar();
    mAdapter = new TabsPagerAdapter(getSupportFragmentManager(), mDate);

    mAdapter.setCurrentIndex(mSelectedTab);

    mViewPager.setAdapter(mAdapter);
    mActionBar.setDisplayShowHomeEnabled(false);
    mActionBar.setDisplayShowTitleEnabled(false);
    mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    mActionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM | ActionBar.DISPLAY_SHOW_HOME);
    mViewPager.setPagingEnabled(false);

    // Adding Tabs
    ActionBar.Tab firstTab = mActionBar
            .newTab()
            .setIcon(R.drawable.first_selector)
            .setTabListener(this);

    ActionBar.Tab secondTab = mActionBar
            .newTab()
            .setIcon(R.drawable.second_selector)
            .setTabListener(this);

    ActionBar.Tab thirdTab = mActionBar
            .newTab()
            .setIcon(R.drawable.third_selector)
            .setTabListener(this);

    mActionBar.addTab(firstTab);
    mActionBar.addTab(secondTab);
    mActionBar.addTab(thirdTab);
    switch (mSelectedTab) {
        case 0:
            mActionBar.selectTab(firstTab);
            break;
        case 1:
            mActionBar.selectTab(secondTab);
            break;
        case 2:
            mActionBar.selectTab(thirdTab);
            break;
    }

    mViewPager.setOffscreenPageLimit(3);

    LayoutInflater mInflater = (LayoutInflater) this
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View mCustomView = mInflater.inflate(R.layout.my_layout_header, null);
    mActionBar.setCustomView(mCustomView);
    mActionBar.setDisplayShowCustomEnabled(true);
}
  

activity_second.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/main_messages_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:focusable="true"
    android:focusableInTouchMode="true">

    <android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/pager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></android.support.v4.view.ViewPager>
</RelativeLayout>
  

TabsPagerAdapter.java:

public class TabsPagerAdapter extends FragmentStatePagerAdapter {
    private String mDate;
    private FragmentManager mFragmentManager;
    private int mCurrentIndex;
    SparseArray<Fragment> registeredFragments;

    public TabsPagerAdapter(FragmentManager fm, String date) {
        super(fm);
        mFragmentManager = fm;
        this.mDate = date;
        initializeFragments();
    }

    private void initializeFragments(){
        registeredFragments = new SparseArray<Fragment>();

        FirstFragment firstFragment = FirstFragment.newInstance(mDate);
        registeredFragments.put(0, firstFragment);
        SecondFragment secondFragment = SecondFragment.newInstance(mDate);
        registeredFragments.put(1, secondFragment);
        ThirdFragment thirdFragment = ThirdFragment.newInstance(mDate);
        registeredFragments.put(2, thirdFragment);
    }

    @Override
    public Fragment getItem(int index) {
        return registeredFragments.get(index);
    }

    @Override
    public int getCount() {
        return 3;
    }

    @Override
    public int getItemPosition(Object object) {
        return POSITION_NONE;
    }

    public int getCurrentIndex() {
        return mCurrentIndex;
    }

    public void setCurrentIndex(int currentIndex) {
        this.mCurrentIndex = currentIndex;
    }
}

FirstFragment.java和layout_first_fragment.xml的代码以及第二个和第三个片段无关紧要。但是,这是模块的build.gradle:

buildscript {
    repositories {
        maven { url 'https://maven.fabric.io/public' }
    }

    dependencies {
        classpath 'io.fabric.tools:gradle:1.+'
    }
}
apply plugin: 'com.android.application'

repositories {
    maven { url 'https://maven.fabric.io/public' }
}


//Put Fabric plugin after Android plugin
apply plugin: 'io.fabric'

android {
    compileSdkVersion 25
    buildToolsVersion "23.0.2"

    defaultConfig {
        applicationId "com.myapplication.android"
        minSdkVersion 11
        targetSdkVersion 23
        versionCode 9
        versionName "1.3.0"

        multiDexEnabled true
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    useLibrary 'org.apache.http.legacy'
    dexOptions{
        javaMaxHeapSize "4g"
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')

    compile "com.android.support:appcompat-v7:25.0.+"
    compile 'com.google.android.gms:play-services:10.0.1'
    compile 'it.sephiroth.android.library.horizontallistview:hlistview:1.2.2'
    compile 'com.anjlab.android.iab.v3:library:1.0.+@aar'
    compile project(':libraries:SlidingMenu')
    compile project(':PullToRefresh')
    compile('com.crashlytics.sdk.android:crashlytics:2.6.5@aar') {
        transitive = true;
    }
    compile 'com.android.support:multidex:1.0.1'
    compile 'com.android.support:design:25.0.1'
}

我希望getActionBar()初始化的ActionBar是设备的整个宽度。我尝试创建自定义操作栏但我遇到了同样的问题。

1 个答案:

答案 0 :(得分:0)

ActionBar Tabs现已正式弃用。现在应该使用TabLayout构建选项卡。 此链接可能有所帮助 https://github.com/codepath/android_guides/wiki/Google-Play-Style-Tabs-using-TabLayout