Bar*_*end 19 android android-actionbar
我正在为应用程序实现视觉设计,事实证明Galaxy S4错位了动作栏主页图标,如屏幕截图所示:

屏幕截图是使用两个设备上完全相同的APK文件拍摄的.紫色指南位于距左侧16dp处,对于屏幕布局的其余部分来说非常重要.S4增加了8dp左右.这个额外的余量使得主页图标看起来真的不合适.
我尝试了不同分辨率/密度的其他三星手机(Galaxy S3,Galaxy S4 Mini,Galaxy Ace),这些都在16dp正确对齐图标.
我会把它归结为Android碎片并继续前进,但Galaxy S4的市场份额是如此之大,以至于我无法忽视这个问题.有没有其他人遇到这个,并找到了修复?
这段代码非常不言自明。它首先根据此处找到的列表检查当前设备是否为 Samsung Galaxy S4 型号。如果是,则它会View根据 的ActionBar布局和home ImageView层次结构中的相对位置查找相关的 。然后将它们向左移动(正)offset参数。它还检查是否View显示自定义,并对其进行更改。唯一的变化是Viewsx坐标,因此它应该适用于任何主题或风格。
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
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1394 次 |
| 最近记录: |