android - 如何在 actionBar 上放置选项卡,与向上按钮和菜单处于同一级别

标签 android android-actionbar

我的应用程序有两个选项卡,我想像这样把它放在 ActionBar 上 up button, tabs and menus at the same level

然而,与向上按钮和菜单相比,这些选项卡总是在较低级别分开,如下所示:

up button, tabs and menus at different levels

我不使用:

android:uiOptions="splitActionBarWhenNarrow"

我怎样才能像第一张图片那样实现我的操作栏? 非常感谢您的任何建议!

最佳答案

我建议为您的操作栏制作一个自定义布局,它将有两个按钮或看起来像选项卡的 ImageView ,并在 onClick() fragment 之间切换。只需要一个 popupMenu 来显示其余的菜单项。

我已经完成布局和示例 Activity 实现:

布局文件:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal" android:layout_width="match_parent"
    android:layout_height="?android:attr/actionBarSize"
    android:showDividers="middle"
    android:divider="@drawable/action_bar_divider"
    android:dividerPadding="10dp"
    android:weightSum="7">

    <RelativeLayout
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="3"
        android:layout_gravity="center_vertical"
        android:orientation="vertical"
        android:clickable="true"
        android:onClick="imagesViewClick">
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="IMAGES"
            android:textColor="@android:color/white"
            android:gravity="center"
            android:layout_centerInParent="true"/>

        <View
            android:id="@+id/images_selected_view"
            android:layout_width="match_parent"
            android:layout_height="6dp"
            android:layout_alignParentBottom="true"
            android:background="#427fed"/>
      </RelativeLayout>


    <RelativeLayout
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="3"
        android:layout_gravity="center_vertical"
        android:orientation="vertical"
        android:clickable="true"
        android:onClick="videosViewClick">
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="VIDEOS"
            android:textColor="@android:color/white"
            android:gravity="center"
            android:layout_centerInParent="true"/>

        <View
            android:id="@+id/videos_selected_view"
            android:layout_width="match_parent"
            android:layout_height="6dp"
            android:layout_alignParentBottom="true"
            android:background="#427fed"
            android:visibility="gone"/>
    </RelativeLayout>


    <ImageView
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_action_overflow"
        android:layout_gravity="center_vertical"
        android:layout_weight="1"/>

</LinearLayout>

这是完整的 Activity 实现:

public class MainActivity extends ActionBarActivity{

private View imagesViewSelected;
private View videosViewSelected;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setupActionBar();
    setContentView(R.layout.activity_main);
    if (savedInstanceState == null) {
        getSupportFragmentManager().beginTransaction()
                .add(R.id.container, new ImagesFragment())
                .commit();
    }
}

private void setupActionBar() {
    ActionBar actionBar = getSupportActionBar();
    actionBar.setDisplayShowTitleEnabled(false);
    actionBar.setDisplayUseLogoEnabled(false);
    actionBar.setDisplayHomeAsUpEnabled(true);
    actionBar.setDisplayShowCustomEnabled(true);
    actionBar.setDisplayShowHomeEnabled(false);

    ActionBar.LayoutParams lp1 = new ActionBar.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
    View customNav = LayoutInflater.from(this).inflate(R.layout.layout_action_bar, null);

    imagesViewSelected = customNav.findViewById(R.id.images_selected_view);
    videosViewSelected = customNav.findViewById(R.id.videos_selected_view);

    actionBar.setCustomView(customNav, lp1);
}


public static class ImagesFragment extends Fragment {

    public ImagesFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_main, container, false);
        ((TextView)rootView.findViewById(R.id.txt_fragment_locator)).setText("Images Fragment");

        return rootView;
    }
}

public static class VideosFragment extends Fragment {

    public VideosFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_main, container, false);

        ((TextView)rootView.findViewById(R.id.txt_fragment_locator)).setText("Videos Fragment");

        return rootView;
    }
}

public void imagesViewClick(View view){
    getSupportFragmentManager().beginTransaction()
            .replace(R.id.container, new ImagesFragment())
            .commit();
    imagesViewSelected.setVisibility(View.VISIBLE);
    videosViewSelected.setVisibility(View.GONE);
}

public void videosViewClick(View view){
    getSupportFragmentManager().beginTransaction()
            .replace(R.id.container, new VideosFragment())
            .commit();
    imagesViewSelected.setVisibility(View.GONE);
    videosViewSelected.setVisibility(View.VISIBLE);
}

您只需实现 PopupMenu。

关于android - 如何在 actionBar 上放置选项卡,与向上按钮和菜单处于同一级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24604972/

相关文章:

android - 如何让ImageView在RelativeLayout中垂直填充

android:digits 问题

java - Android:隐藏 ActionBar,保留 Tabs

android - 具有透明背景的自定义 ActionBar

Android 操作栏?

android - Android SlowGradleBuild

android - 使用一部智能手机/平板电脑连接多个智能 watch

android - 如何在android中检查程序如何崩溃?

android - ActionBar 上的抽屉指示器兼容 v7 21

android - 隐藏操作栏会导致 RelativeLayout 中底部对齐的项目跳转