Android 三星Galaxy S4未对齐Actionbar图标
我正在为一个应用程序实施一个可视化设计,结果发现Galaxy S4与actionbar home图标错位,如屏幕截图所示: 截图是在两台设备上使用完全相同的APK文件拍摄的。紫色指导线位于左侧16dp处,对屏幕布局的其余部分非常重要。S4再增加一个8dp左右。这个额外的边距使主图标看起来很不合适 我试过一系列其他三星手机,它们的分辨率/密度不同(Galaxy S3、Galaxy S4 Mini、Galaxy Ace),所有这些手机都能以16dp正确对齐图标Android 三星Galaxy S4未对齐Actionbar图标,android,android-actionbar,Android,Android Actionbar,我正在为一个应用程序实施一个可视化设计,结果发现Galaxy S4与actionbar home图标错位,如屏幕截图所示: 截图是在两台设备上使用完全相同的APK文件拍摄的。紫色指导线位于左侧16dp处,对屏幕布局的其余部分非常重要。S4再增加一个8dp左右。这个额外的边距使主图标看起来很不合适 我试过一系列其他三星手机,它们的分辨率/密度不同(Galaxy S3、Galaxy S4 Mini、Galaxy Ace),所有这些手机都能以16dp正确对齐图标 我会把这归因于安卓系统的碎片化,然后
我会把这归因于安卓系统的碎片化,然后继续前进,但Galaxy S4的市场份额如此之大,我真的不能忽视这个问题。有没有其他人遇到过这种情况,并找到了解决方法?这段代码非常简单。它首先检查当前设备是否为三星Galaxy S4型号,基于。如果是,它将根据
操作栏的布局和主页图像视图在层次结构中的相对位置查找相关的视图。然后通过(正)offset
参数将它们向左移动。它还检查是否显示自定义的视图
,并将其移动。唯一的更改是视图
s'x
坐标,因此它应该适用于任何主题或样式
private static final String SAMSUNG = "SAMSUNG";
private static final String[] S4_MODELS = {
"GT-I9506", "GT-I9505G", "SGH-I337", "SGH-M919",
"SCH-I545", "SPH-L720", "SCH-R970", "GT-I9508",
"SCH-I959", "GT-I9502", "SGH-N045", "SGH-I337M",
"SGH-M919V", "SCH-R970X", "SCH-R970C"
};
private void adjustGalaxyS4(int offset)
{
if (isGalaxyS4())
shiftHomeView(offset);
}
private boolean isGalaxyS4()
{
String manufacturer = Build.MANUFACTURER.toUpperCase();
String model = Build.MODEL.toUpperCase();
if (SAMSUNG.equals(manufacturer) && !TextUtils.isEmpty(model))
{
for (String m : S4_MODELS)
if (model.contains(m))
return true;
}
return false;
}
private void shiftHomeView(float offset)
{
try
{
View grandParentView = (View) ((View) findViewById(android.R.id.home).getParent()).getParent();
View upView = ((ViewGroup) ((ViewGroup) grandParentView).getChildAt(0)).getChildAt(0);
grandParentView.setX(grandParentView.getX() - offset);
upView.setX(upView.getX() + offset);
if ((getActionBar().getDisplayOptions() & ActionBar.DISPLAY_SHOW_CUSTOM) != 0)
getActionBar().getCustomView().setX(getActionBar().getCustomView().getX() - offset);
}
catch (Exception e)
{
// Fail silently
}
}
通过4.4.2更新确认了Galaxy S3上的相同问题。真的很烦人。这可能是你的风格有问题,ActionBar
在这方面有时会有点棘手,但很可能是三星把ActionBar
搞砸了。首先,我要测试一个负边距是否能解决问题。如果操作系统版本有,Sherlock会委托“本机”操作栏。只是想一想:如果有人有根S3/S4,也许比较视图层次结构可以提供一些见解。即,层次结构是否存在任何差异?如果没有,那么各种视图属性值如何?或者,确定定制ROM是否存在同样的问题可能会很有趣?我不明白为什么每个人都在评论S4上没有出现这种情况。我真的很希望能找到解决办法,但我看到S4上的每个应用程序都能做到这一点。我有一个摩托G,Nexus7和S4在我面前,只有S4的螺丝了。我想我必须保持这样。我更喜欢不那么直率的东西,但这是一个足够有效的解决办法。我必须让它更通用一点,因为不完全是星系S4的错位,所以我将尝试通过实际的X坐标与预期的X坐标来检测错位。有趣的是,我之前也写过类似的东西,但我尝试调整视图的布局参数,但无论是否使用requestLayout(),都无法使其工作。有时,调用setX()的简单方法显然更具说服力。最后,我们使用MaterialMenu开源库作为ActionBar中的自定义视图,完全避开了这个问题。