/*
* Copyright (C) 2012 www.amsoft.cn
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.ab.view.titlebar;
import android.app.Activity;
import android.content.Context;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.Display;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.WindowManager;
import android.widget.LinearLayout;
import android.widget.PopupWindow;
import com.ab.util.AbViewUtil;
// TODO: Auto-generated Javadoc
/**
* © 2012 amsoft.cn
* 名称:AbBottomBar.java
* 描述:底部菜单栏实现.
*
* @author 还如一梦中
* @version v1.0
* @date:2013-04-24 下午11:52:13
*/
public class AbBottomBar extends LinearLayout {
/** 所属Activity. */
private Activity mActivity;
/** 副标题栏布局ID. */
public int mBottomBarID = 2;
/** 全局的LayoutInflater对象,已经完成初始化. */
public LayoutInflater mInflater;
/** 下拉选择. */
private PopupWindow popupWindow;
/** Window 管理器. */
private WindowManager mWindowManager = null;
/** 屏幕宽度. */
public int diaplayWidth = 320;
/**
* Instantiates a new ab bottom bar.
*
* @param context the context
* @param attrs the attrs
*/
public AbBottomBar(Context context, AttributeSet attrs) {
super(context, attrs);
ininBottomBar(context);
}
/**
* Instantiates a new ab bottom bar.
*
* @param context the context
*/
public AbBottomBar(Context context) {
super(context);
ininBottomBar(context);
}
/**
* Inin bottom bar.
*
* @param context the context
*/
public void ininBottomBar(Context context){
mActivity = (Activity)context;
//水平排列
this.setOrientation(LinearLayout.HORIZONTAL);
this.setId(mBottomBarID);
this.setPadding(0, 0, 0, 0);
mInflater = LayoutInflater.from(context);
mWindowManager = mActivity.getWindowManager();
Display display = mWindowManager.getDefaultDisplay();
diaplayWidth = display.getWidth();
}
/**
* 描述:标题栏的背景图.
* @param res 背景图资源ID
*/
public void setBottomBarBackground(int res) {
this.setBackgroundResource(res);
}
/**
* 描述:标题栏的背景图.
* @param color 背景颜色值
*/
public void setBottomBarBackgroundColor(int color) {
this.setBackgroundColor(color);
}
/**
* 描述:设置标题背景.
* @param d 背景图
*/
public void setBottomBarBackgroundDrawable(Drawable d) {
this.setBackgroundDrawable(d);
}
/**
* 描述:下拉菜单的的实现方法.
*
* @param parent the parent
* @param view 要显示的View
* @param offsetMode 不填满的模式
*/
private void showWindow(View parent,View view,boolean offsetMode) {
AbViewUtil.measureView(view);
int popWidth = parent.getMeasuredWidth();
if(view.getMeasuredWidth()>parent.getMeasuredWidth()){
popWidth = view.getMeasuredWidth();
}
int popMargin = this.getMeasuredHeight();
if(offsetMode){
popupWindow = new PopupWindow(view,popWidth, LayoutParams.WRAP_CONTENT, true);
}else{
popupWindow = new PopupWindow(view, LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT, true);
}
int[] location = new int[2];
parent.getLocationInWindow(location);
int startX = location[0]-parent.getLeft();
if(startX + popWidth >= diaplayWidth){
startX = diaplayWidth-popWidth-2;
}
// 使其聚集
popupWindow.setFocusable(true);
// 设置允许在外点击消失
popupWindow.setOutsideTouchable(true);
// 这个是为了点击“返回Back”也能使其消失,并且并不会影响你的背景
popupWindow.setBackgroundDrawable(new ColorDrawable(android.R.color.transparent));
popupWindow.showAtLocation(parent,Gravity.BOTTOM|Gravity.LEFT,startX,popMargin+2);
}
/**
* 描述:设置下拉的View.
*
* @param parent the parent
* @param view the view
*/
public void setDropDown(final View parent,final View view){
if(parent==null || view == null){
return;
}
parent.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
showWindow(parent,view,true);
}
});
}
/**
* 描述:设置副标题栏界面显示.
*
* @param view the new bottom view
*/
public void setBottomView(View view) {
removeAllViews();
addView(view,new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
}
/**
* 描述:用指定资源ID表示的View填充主界面.
* @param resId 指定的View的资源ID
*/
public void setBottomView(int resId) {
setBottomView(mInflater.inflate(resId, null));
}
}