/* * 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.activity; import java.lang.reflect.Field; import android.app.Application; import android.graphics.Color; import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.Window; import android.widget.AbsListView; import android.widget.LinearLayout; import android.widget.LinearLayout.LayoutParams; import android.widget.RelativeLayout; import com.ab.view.ioc.AbIocEventListener; import com.ab.view.ioc.AbIocSelect; import com.ab.view.ioc.AbIocView; import com.ab.view.titlebar.AbBottomBar; import com.ab.view.titlebar.AbTitleBar; // TODO: Auto-generated Javadoc /** * © 2012 amsoft.cn * 名称:AbActivity.java * 描述:继承这个Activity使你的Activity拥有一个程序框架. * * @author 还如一梦中 * @version v1.0 * @date:2013-1-15 下午3:27:05 */ public abstract class AbActivity extends FragmentActivity { /** 全局的LayoutInflater对象,已经完成初始化. */ public LayoutInflater mInflater; /** 全局的Application对象,已经完成初始化. */ public Application abApplication = null; /** 总布局. */ public RelativeLayout ab_base = null; /** 标题栏布局. */ private AbTitleBar mAbTitleBar = null; /** 副标题栏布局. */ private AbBottomBar mAbBottomBar = null; /** 主内容布局. */ protected RelativeLayout contentLayout = null; /** * 描述:创建. * * @param savedInstanceState the saved instance state * @see android.support.v4.app.FragmentActivity#onCreate(android.os.Bundle) */ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); mInflater = LayoutInflater.from(this); //主标题栏 mAbTitleBar = new AbTitleBar(this); //最外层布局 ab_base = new RelativeLayout(this); ab_base.setBackgroundColor(Color.rgb(255, 255, 255)); //内容布局 contentLayout = new RelativeLayout(this); contentLayout.setPadding(0, 0, 0, 0); //副标题栏 mAbBottomBar = new AbBottomBar(this); //填入View ab_base.addView(mAbTitleBar,new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); mAbTitleBar.setVisibility(View.GONE); RelativeLayout.LayoutParams layoutParamsBottomBar = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); layoutParamsBottomBar.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, RelativeLayout.TRUE); ab_base.addView(mAbBottomBar, layoutParamsBottomBar); RelativeLayout.LayoutParams layoutParamsContent = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); layoutParamsContent.addRule(RelativeLayout.BELOW, mAbTitleBar.getId()); layoutParamsContent.addRule(RelativeLayout.ABOVE, mAbBottomBar.getId()); ab_base.addView(contentLayout, layoutParamsContent); //Application初始化 abApplication = getApplication(); //设置ContentView setContentView(ab_base,new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); } /** * 描述:用指定的View填充主界面. * @param contentView 指定的View */ public void setAbContentView(View contentView) { contentLayout.removeAllViews(); contentLayout.addView(contentView,new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); //ioc initIocView(); } /** * 描述:用指定资源ID表示的View填充主界面. * @param resId 指定的View的资源ID */ public void setAbContentView(int resId) { setAbContentView(mInflater.inflate(resId, null)); } /** * 获取主标题栏布局. * @return the title layout */ public AbTitleBar getTitleBar() { mAbTitleBar.setVisibility(View.VISIBLE); return mAbTitleBar; } /** * 获取副标题栏布局. * @return the bottom layout */ public AbBottomBar getBottomBar() { return mAbBottomBar; } /** * 描述:Activity结束. * * @see android.app.Activity#finish() */ @Override public void finish() { super.finish(); } /** * 描述:设置绝对定位的主标题栏覆盖到内容的上边. * * @param overlay the new title bar overlay */ public void setTitleBarOverlay(boolean overlay) { ab_base.removeAllViews(); if(overlay){ RelativeLayout.LayoutParams layoutParamsFW1 = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); layoutParamsFW1.addRule(RelativeLayout.ABOVE, mAbBottomBar.getId()); ab_base.addView(contentLayout,layoutParamsFW1); RelativeLayout.LayoutParams layoutParamsFW2 = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); layoutParamsFW2.addRule(RelativeLayout.ALIGN_PARENT_TOP,RelativeLayout.TRUE); ab_base.addView(mAbTitleBar,layoutParamsFW2); RelativeLayout.LayoutParams layoutParamsFW3 = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); layoutParamsFW3.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, RelativeLayout.TRUE); ab_base.addView(mAbBottomBar, layoutParamsFW3); }else{ ab_base.addView(mAbTitleBar,new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); RelativeLayout.LayoutParams layoutParamsFW2 = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); layoutParamsFW2.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, RelativeLayout.TRUE); ab_base.addView(mAbBottomBar, layoutParamsFW2); RelativeLayout.LayoutParams layoutParamsFW1 = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); layoutParamsFW1.addRule(RelativeLayout.BELOW, mAbTitleBar.getId()); layoutParamsFW1.addRule(RelativeLayout.ABOVE, mAbBottomBar.getId()); ab_base.addView(contentLayout, layoutParamsFW1); } } /** * 描述:设置界面显示(忽略标题栏). * * @param layoutResID the new content view * @see android.app.Activity#setContentView(int) */ @Override public void setContentView(int layoutResID) { super.setContentView(layoutResID); initIocView(); } /** * 描述:设置界面显示(忽略标题栏). * * @param view the view * @param params the params * @see android.app.Activity#setContentView(android.view.View, android.view.ViewGroup.LayoutParams) */ @Override public void setContentView(View view, android.view.ViewGroup.LayoutParams params) { super.setContentView(view, params); initIocView(); } /** * 描述:设置界面显示(忽略标题栏). * * @param view the new content view * @see android.app.Activity#setContentView(android.view.View) */ public void setContentView(View view) { super.setContentView(view); initIocView(); } /** * 初始化为IOC控制的View. */ private void initIocView(){ Field[] fields = getClass().getDeclaredFields(); if(fields!=null && fields.length>0){ for(Field field : fields){ try { field.setAccessible(true); if(field.get(this)!= null ) continue; AbIocView viewInject = field.getAnnotation(AbIocView.class); if(viewInject!=null){ int viewId = viewInject.id(); field.set(this,findViewById(viewId)); setListener(field,viewInject.click(),AbIocEventListener.CLICK); setListener(field,viewInject.longClick(),AbIocEventListener.LONGCLICK); setListener(field,viewInject.itemClick(),AbIocEventListener.ITEMCLICK); setListener(field,viewInject.itemLongClick(),AbIocEventListener.ITEMLONGCLICK); AbIocSelect select = viewInject.select(); if(!TextUtils.isEmpty(select.selected())){ setViewSelectListener(field,select.selected(),select.noSelected()); } } } catch (Exception e) { e.printStackTrace(); } } } } /** * 设置view的监听器. * * @param field the field * @param select the select * @param noSelect the no select * @throws Exception the exception */ private void setViewSelectListener(Field field,String select,String noSelect)throws Exception{ Object obj = field.get(this); if(obj instanceof View){ ((AbsListView)obj).setOnItemSelectedListener(new AbIocEventListener(this).select(select).noSelect(noSelect)); } } /** * 设置view的监听器. * * @param field the field * @param methodName the method name * @param method the method * @throws Exception the exception */ private void setListener(Field field,String methodName,int method)throws Exception{ if(methodName == null || methodName.trim().length() == 0) return; Object obj = field.get(this); switch (method) { case AbIocEventListener.CLICK: if(obj instanceof View){ ((View)obj).setOnClickListener(new AbIocEventListener(this).click(methodName)); } break; case AbIocEventListener.ITEMCLICK: if(obj instanceof AbsListView){ ((AbsListView)obj).setOnItemClickListener(new AbIocEventListener(this).itemClick(methodName)); } break; case AbIocEventListener.LONGCLICK: if(obj instanceof View){ ((View)obj).setOnLongClickListener(new AbIocEventListener(this).longClick(methodName)); } break; case AbIocEventListener.ITEMLONGCLICK: if(obj instanceof AbsListView){ ((AbsListView)obj).setOnItemLongClickListener(new AbIocEventListener(this).itemLongClick(methodName)); } break; default: break; } } }

652654393 LV5
2024年11月18日
haozhilang LV9
2023年11月2日
yyyyyyzh LV8
2023年6月11日
wanfeng_233 LV4
2023年5月29日
sks666 LV5
2023年2月19日
lasherry LV2
2023年2月14日
快乐的程序员 LV25
2023年1月21日
ABU元帅 LV2
2022年11月7日
787194770 LV10
2022年10月19日
yjycdjb LV5
2022年5月23日

652654393 LV5
2024年11月18日
Silence丶二哈 LV13
2024年9月2日
17693282606 LV12
2024年6月20日
2636804923 LV6
2024年6月20日
lilitu LV6
2024年5月31日
阿九11111 LV4
2024年5月21日
panwill LV5
2024年5月15日
13543528515 LV8
2024年4月29日
小yuzhennice
2024年4月27日
暂无贡献等级
syd1988 LV7
2024年3月7日