使用 android.support.v7.app.ActionBar 的选项卡

2023-12-02

我最近更新了我的 Android 应用程序,以在 Android 2.3 上使用对操作栏和操作栏选项卡的 v7 支持。更新代码后,我在 4.2 设备和模拟 2.3 设备上运行该应用程序。操作栏和选项卡在真实硬件上显示良好,但在模拟设备上则不然。仅显示第一个片段,并且视图的左侧和顶部被剪裁。这是我的主要操作栏活动。

  package com.rmsanger.minneapolishiltongargeninn;

  import android.support.v4.app.Fragment;
  import android.support.v4.app.FragmentTransaction;
  import android.os.Bundle;
  import android.support.v7.app.ActionBar;
  import android.support.v7.app.ActionBar.Tab;
  import android.support.v7.app.ActionBarActivity;

  public class MainActivity extends ActionBarActivity {



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

    android.support.v7.app.ActionBar actionBar = getSupportActionBar();


    //actionBar.setDisplayShowTitleEnabled(false);

    Tab tab = actionBar.newTab();   


    String label2 = getResources().getString(R.string.informationtab_label);
    tab = actionBar.newTab();
    tab.setText(label2);
    TabListener<InformationFragment> tl2 = new TabListener<InformationFragment>(this, label2, InformationFragment.class);
    tab.setTabListener(tl2);
    actionBar.addTab(tab);

    String label3 = getResources().getString(R.string.diningtab_label);
    tab = actionBar.newTab();
    tab.setText(label3);
    TabListener<DiningFragment> tl3 = new TabListener<DiningFragment>(this, label3, DiningFragment.class);
    tab.setTabListener(tl3);
    actionBar.addTab(tab);

    String label6 = getResources().getString(R.string.localattractionstab_label);
    tab = actionBar.newTab();
    tab.setText(label6);
    TabListener<LocalAttractionsFragment> tl6 = new TabListener<LocalAttractionsFragment>(this, label6, LocalAttractionsFragment.class);
    tab.setTabListener(tl6);
    actionBar.addTab(tab);


    String label7 = getResources().getString(R.string.localeventstab_label);
    tab = actionBar.newTab();
    tab.setText(label7);
    TabListener<LocalEventsFragment> tl7 = new TabListener<LocalEventsFragment>(this, label7, LocalEventsFragment.class);
    tab.setTabListener(tl7);
    actionBar.addTab(tab);

    String label5 = getResources().getString(R.string.faqtab_label);
    tab = actionBar.newTab();
    tab.setText(label5);
    TabListener<FAQFragment> tl5 = new TabListener<FAQFragment>(this, label5, FAQFragment.class);
    tab.setTabListener(tl5);
    actionBar.addTab(tab);

    String label8 = getResources().getString(R.string.dealstab_label);
    tab = actionBar.newTab();
    tab.setText(label8);
    TabListener<DealsFragment> tl8 = new TabListener<DealsFragment>(this, label8, DealsFragment.class);
    tab.setTabListener(tl8);
    actionBar.addTab(tab);

    String label4 = getResources().getString(R.string.socialmediatab_label);
    tab = actionBar.newTab();
    tab.setText(label4);
    TabListener<SocialMediaFragment> tl4 = new TabListener<SocialMediaFragment>(this, label4, SocialMediaFragment.class);
    tab.setTabListener(tl4);
    actionBar.addTab(tab);


    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    actionBar.show();

    if (savedInstanceState != null) {
        actionBar.setSelectedNavigationItem(savedInstanceState.getInt("tab", 0));
    }   

}


@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putInt("tab", getSupportActionBar().getSelectedNavigationIndex());
}   

private class TabListener<T extends Fragment> implements
    ActionBar.TabListener {
    private Fragment mFragment;
    private final ActionBarActivity mActivity;
    private final String mTag;
    private final Class<T> mClass;

    /**
     * Constructor used each time a new tab is created.
     * 
     * @param activity
     *            The host Activity, used to instantiate the fragment
     * @param tag
     *            The identifier tag for the fragment
     * @param clz
     *            The fragment's Class, used to instantiate the fragment
     */
    public TabListener(ActionBarActivity activity, String tag, Class<T> clz) {
        mActivity = activity;
        mTag = tag;
        mClass = clz;
    }

    public void onTabSelected(Tab tab, FragmentTransaction ft) {

        mFragment = mActivity.getSupportFragmentManager().findFragmentByTag(mTag);
        // Check if the fragment is already initialized
        if (mFragment == null) {
            // If not, instantiate and add it to the activity
            mFragment = Fragment.instantiate(mActivity, mClass.getName());
            ft.add(android.R.id.content, mFragment, mTag);
        } else {
            // If it exists, simply attach it in order to show it
            ft.attach(mFragment);
        }
    }

    public void onTabUnselected(Tab tab, FragmentTransaction ft) {
        if (mFragment != null) {
            // Detach the fragment, because another one is being attached
            ft.detach(mFragment);
        }
    }

    public void onTabReselected(Tab tab, FragmentTransaction ft) {
        // User selected the already selected tab. Usually do nothing.
    }
}


  }

*更新我替换了

     ft.add(android.R.id.content, mFragment, mTag);

with

     ft.add(R.id.fragView, mFragment, mTag);

其中 fragView 只是一个相对布局,现在显示选项卡。然而,视图的顶部和左侧仍然被剪裁。


更新为使用此处描述的方法并解决了布局问题。

带有支持库和 Fragments 覆盖内容的 ActionBar

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 android.support.v7.app.ActionBar 的选项卡 的相关文章

随机推荐

  • 按值组的连续日期范围对行进行分组

    考虑一些表T 订购Col1 Col2 Date1 Date2 Col1 Col2 Date1 Date2 rate ABC 123 11 4 2014 11 5 2014 90 ABC 123 11 4 2014 11 6 2014 55
  • 用C++制作一个倒计时器

    我有一个控制台应用程序 旨在只在 Windows 上运行 它写在C 有什么办法可以等待60秒 and 显示剩余时间在屏幕上 然后继续代码流 我尝试了互联网上的不同解决方案 但没有一个有效 它们要么不起作用 要么无法正确显示时间 Please
  • Windows 7上Android Studio安装失败,找不到JDK

    我下载了 Android Studio 并尝试启动该程序 它在 Windows 7 64 位和 Java 1 7 上运行 在安装过程中 检测到我的 Java 1 7 安装的其余部分顺利进行 但是 当尝试从桌面图标启动应用程序时 没有任何反应
  • 使用 DotNetZip 从 zip 中提取特定文件夹

    我已经搜索了示例 但似乎找不到涉及提取某个文件夹的 DotNetZip 场景 我正在尝试从 zip 文件中提取一个名为 CSS 的文件夹 它是 zip 文件内的顶级文件夹 这是我到目前为止的代码 using ZipFile zip1 Zip
  • Swift 中如何知道哪个 SKSpriteNode 受到碰撞检测的影响?

    情况 我的 iOS 屏幕上有两艘或更多艘飞船 两者都有不同的属性 如名称 大小 生命值和得分 它们显示为SKSpriteNodes并且每个都添加了一个physicsBody 目前 这些额外的属性是扩展的变量SKSpriteNode clas
  • 在R中的时间间隔后中断readline()

    如何在经过一定时间后中断循环 我有一个从用户收集观察数据的功能 记录数据时 用户应该有一个预定义的时间限制 示例中为 30 秒 目前 如果用户输入晚于时间限制结束 该功能就会中断 record events lt function dura
  • 将 CUDA 添加到 ROS 包

    我想在 ros 包中使用 cuda 有人给我一个简单的例子吗 我尝试使用 cuda 函数构建一个静态库并将该库添加到我的包中 但总是出现链接错误 未定义的引用 cuda 我已经构建了一个可执行文件而不是库并且它可以工作 请帮忙 我自己找到了
  • 使用数组分隔符连接数组序列(“散布”)

    是否有一个函数可以让我连接多个数组 它们之间有分隔符 分隔符也是数组 类似于join有效但不限于字符串 该函数可以是标准 JS 或主要库的一部分 例如lodash 这就是标签中引用它的原因 这是一个用法示例 let numbers 1 2
  • 未捕获的类型错误:对象 [object Object] 没有方法“on”

    我创建了一个函数appendScript 它将在按钮单击事件上调用 我的函数代码是 function appendScript var v js var head document getElementsByTagName head 0 v
  • 设置UDP套接字的recv fcn超时

    我通过以下方式发送 UDP 数据包sendto 然后通过以下方式收到答案recv if recv没有收到回复 程序不会继续进行 但是 udp数据包可能会丢失 或者由于某种原因无法发送数据包 从而导致程序卡在recv线 我想知道如何设置超时r
  • Google 托管库不必要地使用缓存断路器

    我在仪表板上使用以下代码来不断刷新它而不会闪烁如何使用 jQuery 刷新页面 然而 由于一些缓存破坏器 这也会导致 javascript 每次重新加载
  • JavaScript 中的日期到时间戳

    javascript 是否可以将某些日期转换为时间戳 我有这种格式的日期2010 03 09 12 21 00我想用 javascript 将其转换为等效的时间戳 回应您的编辑 你需要解析日期字符串建立一个Date对象 然后就可以获取时间戳
  • create-react-app 中缩小的组件堆栈跟踪(开发模式)

    Running create react app in 发展 mode 为什么我的控制台错误链接到缩小的代码块 我想我记得 CRA 能够显示源映射文件 这是因为该错误是由您使用的依赖项之一引发的 当你安装一个包时 你会在你的node mod
  • 使用外部缓冲区存储字符串而不进行复制

    假设我有一个函数可以得到const string 作为其输入 例如 void foo const string s 然后我有一个内部缓冲区const char buffer 我知道它的大小 我认为如果我内联创建字符串 仍然会发生一份副本 f
  • 以编程方式查找 Chrome 浏览器历史记录

    我正在制作一个小型 Java 应用程序来显示用户最常访问 Chrome 中的哪些 URL 如何在 Java 中访问我的浏览器历史记录 创建一个ContentObserver班级 static class ChromeOberver exte
  • Python:循环读取所有文本文件行

    我想逐行读取巨大的文本文件 如果找到带有 str 的行则停止 如何检查是否到达文件末尾 fn t log f open fn r while not is eof f how to check that end is reached s f
  • 从表示图像的数组中提取环/扇形区域

    我正在尝试从 MATLAB 中图像的数组表示形式中提取特征 这些特征具有圆形 环 和扇形的形状 如下图所示 我花了相当多的时间寻找一个可以做到这一点的内置函数 我已经设法使用一个丑陋的循环来进行环提取 但不知道从哪里开始扇区部分 任何关于如
  • 如何为 Firefox、IE 和 Chrome 创建插件/附加组件

    我需要为 IE firefox 和 chrome 浏览器创建插件 附加组件 以满足以下要求 如果请求的网址采用特定格式 匹配特定正则表达式模式 则插件必须阻止该请求并弹出警报框 我进行了很多搜索 但没有找到任何有用的东西 对于IE 我认为我
  • 发布表单时如何获取复选框元素中未选中复选框的值?

    我有一个如下所示的表格
  • 使用 android.support.v7.app.ActionBar 的选项卡

    我最近更新了我的 Android 应用程序 以在 Android 2 3 上使用对操作栏和操作栏选项卡的 v7 支持 更新代码后 我在 4 2 设备和模拟 2 3 设备上运行该应用程序 操作栏和选项卡在真实硬件上显示良好 但在模拟设备上则不