ActionBar Navigation Tabs 是否可以在手机和平板电脑上显示相同?
请参阅下面的手机和平板电脑图片:
电话:
平板电脑:
Android documentation声明“...当屏幕足够宽时,选项卡会出现在操作栏中的操作按钮旁边...”。 我们不希望它们出现在 ActionBar 中。有什么解决办法吗?
最佳答案
ActionBar 选项卡由 ScrollingTabContainerView 创建. ActionBarView ,ActionBar 的实际 View,包含一个方法 ActionBarView.setEmbeddedTabView它主要负责将选项卡放置在 ActionBar 下方或嵌入其中。
当 ActionBar 为 initialized in Activity 时, 它使用 ActionBarPolicy根据定义为 true in the system's resources 的 boolean 值确定何时使用嵌入式选项卡, 但是 false in portrait mode .因此,在初始化时 ActionBarImpl.setHasEmbeddedTabs被调用以确定放置选项卡的位置。而且,正如文档所述:
...when the screen is wide enough the tabs appear in the action bar alongside the action buttons
那么如何阻止它嵌入标签呢?
似乎您在这里有两个选择,至少对我来说,一个显然比另一个更好。
您可以使用反射调用 ActionBarImpl.setHasEmbeddedTabs 并将其设置为始终为 false。您需要使用反射,因为 ActionBarImpl 是一个内部类,并且没有公共(public)的 ActionBar 方法来指示何时嵌入选项卡。
您可以停止使用 ActionBar.Tab API 并切换到替代方案,like Google's SlidingTabLayout .这将要求您使用 ViewPager,无论如何使用选项卡时这通常是一个不错的加分项,您甚至可能已经在使用它。
以下是两者的示例:
使用反射
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final ActionBar actionBar = getActionBar();
// Implement your tabs
...
try {
final Class<?> clazz = actionBar.getClass();
final Method embedTabs = clazz.getDeclaredMethod("setHasEmbeddedTabs", boolean.class);
embedTabs.invoke(actionBar, false);
} catch (final Exception ignored) {
// Nothing to do
}
}
反射(reflection)结果
从固定标签切换到可滚动标签
要使用 Google 的 SlidingTabLayout,您需要将两个类复制到您的项目中。您需要的类(class)是:
实现 SlidingTabLayout 的布局示例如下所示:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<your_path_to.SlidingTabLayout
android:id="@+id/slidingTabs"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<android.support.v4.view.ViewPager
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
</LinearLayout>
在展开布局并使用 View.findViewById 初始化 SlidingTabLayout 之后,调用 SlidingTabLayout.setViewPager 绑定(bind) ViewPager 到选项卡。
Check out Google's example for a full project
可滚动的标签结果
Google 的多个应用中都使用了可滚动标签,例如 Play 商店和 Play 音乐。对于演示它们的简短视频,如果您不熟悉,check out the Android design docs on tabs .
结论
简而言之,如果您不希望嵌入标签,我建议使用可滚动标签而不是固定标签(至少在横向模式下)。
关于Android ActionBar 导航选项卡在手机和平板电脑上看起来不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20093404/
这是在Ruby中设置默认值的常用方法:classQuietByDefaultdefinitialize(opts={})@verbose=opts[:verbose]endend这是一个容易落入的陷阱:classVerboseNoMatterWhatdefinitialize(opts={})@verbose=opts[:verbose]||trueendend正确的做法是:classVerboseByDefaultdefinitialize(opts={})@verbose=opts.include?(:verbose)?opts[:verbose]:trueendend编写Verb
我一直致力于让我们的Rails2.3.8应用程序在JRuby下正确运行。一切正常,直到我启用config.threadsafe!以实现JRuby提供的并发性。这导致lib/中的模块和类不再自动加载。使用config.threadsafe!启用:$rubyscript/runner-eproduction'pSim::Sim200Provisioner'/Users/amchale/.rvm/gems/jruby-1.5.1@web-services/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:105:in`co
电脑0x0000001A蓝屏错误怎么U盘重装系统教学分享。有用户电脑开机之后遇到了系统蓝屏的情况。系统蓝屏问题很多时候都是系统bug,只有通过重装系统来进行解决。那么蓝屏问题如何通过U盘重装新系统来解决呢?来看看以下的详细操作方法教学吧。 准备工作: 1、U盘一个(尽量使用8G以上的U盘)。 2、一台正常联网可使用的电脑。 3、ghost或ISO系统镜像文件(Win10系统下载_Win10专业版_windows10正式版下载-系统之家)。 4、在本页面下载U盘启动盘制作工具:系统之家U盘启动工具。 U盘启动盘制作步骤: 注意:制作期间,U盘会被格式化,因此U盘中的重要文件请注
我基本上来自Java背景并且努力理解Ruby中的模运算。(5%3)(-5%3)(5%-3)(-5%-3)Java中的上述操作产生,2个-22个-2但在Ruby中,相同的表达式会产生21个-1-2.Ruby在逻辑上有多擅长这个?模块操作在Ruby中是如何实现的?如果将同一个操作定义为一个web服务,两个服务如何匹配逻辑。 最佳答案 在Java中,模运算的结果与被除数的符号相同。在Ruby中,它与除数的符号相同。remainder()在Ruby中与被除数的符号相同。您可能还想引用modulooperation.
RSpec似乎按顺序匹配方法接收的消息。我不确定如何使以下代码工作:allow(a).toreceive(:f)expect(a).toreceive(:f).with(2)a.f(1)a.f(2)a.f(3)我问的原因是a.f的一些调用是由我的代码的上层控制的,所以我不能对这些方法调用添加期望。 最佳答案 RSpecspy是测试这种情况的一种方式。要监视一个方法,用allowstub,除了方法名称之外没有任何约束,调用该方法,然后expect确切的方法调用。例如:allow(a).toreceive(:f)a.f(2)a.f(1)
我正在使用Rails3.2.3和Ruby1.9.3p0。我发现我经常需要确定某个字符串是否出现在选项列表中。看来我可以使用Ruby数组.includemethod:或正则表达式equals-tildematchshorthand用竖线分隔选项:就性能而言,一个比另一个好吗?还有更好的方法吗? 最佳答案 总结:Array#include?包含String元素,在接受和拒绝输入时均胜出,对于您的示例只有三个可接受的值。对于要检查的更大的集合,看起来Set#include?和String元素可能会获胜。如何测试我们应该根据经验对此进行测试
A/ctohttp://wiki.nginx.org/CoreModule#usermaster进程曾经以root用户运行,是否可以以不同的用户运行nginxmaster进程? 最佳答案 只需以非root身份运行init脚本(即/etc/init.d/nginxstart),就可以用不同的用户运行nginxmaster进程。如果这真的是你想要做的,你将需要确保日志和pid目录(通常是/var/log/nginx&/var/run/nginx.pid)对该用户是可写的,并且您所有的listen调用都是针对大于1024的端口(因为绑定(
有没有办法在sinatra的beforedoblock中停止执行并返回不同的值?beforedo#codeishere#Iwouldliketo'return"Message"'#Iwouldlike"/home"tonotgetcalled.end//restofthecodeget'/home'doend 最佳答案 beforedohalt401,{'Content-Type'=>'text/plain'},'Message!'end如果你愿意,你可以只指定状态,这里有状态、标题和正文的例子
我想用sunspot重现以下原始solr查询q=exact_term_text:fooORterm_textv:foo*ORalternate_text:bar*但我无法通过标准的太阳黑子界面理解这是否可能以及如何实现,因为看起来:fulltext方法似乎不接受多个文本/搜索字段参数我不知道将什么参数作为第一个参数传递给fulltext,就好像我通过了"foo"或"bar"结果不匹配如果我传递一个空参数,我得到一个q=*:*范围过滤器(例如with(:term).starting_with('foo*')(顾名思义)作为过滤器查询应用,因此不参与评分。似乎可以手动编写字符串(或者可能使
我从ui中得到日期范围为-approved_between"=>"2013-03-17-2013-03-18"我需要拆分此approved_start_date="2013-03-17"和approved_end_date="2013-03-18"...我希望使用它在mysql中查询,因为mysql中的日期格式是created_at:2012-07-2810:35:01.我正在做的是:approved=approved_between.split("")approved_start_date=approved[0]approved_end_date=approved[2]很确定这不是处