Android——自定义Actionbar左侧覆盖不全的解决方案
今天遇到一个很蛋疼的问题,就是在自定义Actionbar的时候,setCustomView中,自定义的view怎么也覆盖不了整个视图,左侧一直留有一个空白,看下图:
所写的部分代码如下:
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 自定义actionbar的布局 setActionBarLayout( R.layout.actionbar_port ); } /* 自定义actionbar */ private void setActionBarLayout(int layoutId) { ActionBar actionBar = getActionBar( ); /*使左上角图标是否显示,如果设成false,则没有程序图标,仅仅就个标题, 如果设成true,显示应用程序图标,对应id为android.R.id.home*/ actionBar.setDisplayShowHomeEnabled( false ); //使自定义的普通View能在title栏显示,即actionBar.setCustomView能起作用 actionBar.setDisplayShowCustomEnabled(true); LayoutInflater inflator = (LayoutInflater) this.getSystemService( Context.LAYOUT_INFLATER_SERVICE); View v = inflator.inflate(layoutId,null); ActionBar.LayoutParams layout = new ActionBar.LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); actionBar.setCustomView(v,layout); }实际显示的时候,在4.4.2系统,ActionBar左侧有一块区域不是自定义的布局。在当前Activity的父类或者上述代码中加入如下代码,则显示正常:
//测试发现在4.4系统上,没有该代码,则ActionBar左侧出现无法覆盖问题 if (getActionBar() != null) { getActionBar().setTitle(""); }
即有:
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 自定义actionbar的布局 setActionBarLayout( R.layout.actionbar_port ); } /* 自定义actionbar */ private void setActionBarLayout(int layoutId) { ActionBar actionBar = getActionBar( ); /*使左上角图标是否显示,如果设成false,则没有程序图标,仅仅就个标题, 如果设成true,显示应用程序图标,对应id为android.R.id.home*/ actionBar.setDisplayShowHomeEnabled( false ); //使自定义的普通View能在title栏显示,即actionBar.setCustomView能起作用 actionBar.setDisplayShowCustomEnabled(true); //测试发现在4.4系统上,没有该代码,则ActionBar左侧出现无法覆盖问题 if (getActionBar() != null) { getActionBar().setTitle(""); } LayoutInflater inflator = (LayoutInflater) this.getSystemService( Context.LAYOUT_INFLATER_SERVICE); View v = inflator.inflate(layoutId,null); ActionBar.LayoutParams layout = new ActionBar.LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); actionBar.setCustomView(v,layout); }