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);
}


posted on 2015-05-28 19:20  anyuan9  阅读(205)  评论(0编辑  收藏  举报

导航