編輯:關於Android編程
想必開發過android的都使用過一些 框架,然而框架裡都會使用一些,注解來幫助我們,節省大量的代碼開發量。同時也使代碼更加的簡潔。
但是注解是通過java反射來實現的當然可能會犧牲掉一些性能。
以下是本人寫的一個較為簡單的綁定控件,並且觸發其OnclickListem 事件。
//直接先看下注解方法。比較簡單,清晰
public class MainActivity extends FragmentActivity { //綁定對應的按鈕控件,事件名稱為onClickCallback @InjectView(id = R.id.button1, clickMethod = "onClickCallback") private Button Button1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); UIBindUtil.bind(this);//初始化綁定 } @ClickMethod(R.id.button1) public void onClickCallback(View view) {//觸發的事件 Toast.makeText(MainActivity.this, "我是注解", 1).show(); } }
//接下來是綁定的初始化類
package com.ferris.ioc; import java.lang.reflect.Field; import java.lang.reflect.Method; import android.app.Activity; public class UIBindUtil { /** * 綁定初始化各個空間的屬性以及事件 * @param activity */ public static void bind(Activity activity) { Class> cl = activity.getClass(); bindViews(activity, cl); bindMethods(activity, cl); } /** * 為按鈕綁定對應的事件方法 * @param activity * @param cl */ private static void bindMethods(Activity activity, Class> cl) { for (Method method : cl.getDeclaredMethods()) { ClickMethod oc = method.getAnnotation(ClickMethod.class); if (oc != null) { int ids[] = oc.value(); for (int id : ids) { OnEventListener listener = new OnEventListener(activity) .setmClick(id,method.getName()); activity.findViewById(id).setOnClickListener(listener); } } } } /** * 初始化按鈕 * @param activity * @param cl */ private static void bindViews(Activity activity, Class> cl) { try { for (Field field : cl.getDeclaredFields()) { InjectView av = field.getAnnotation(InjectView.class); if (av != null) { field.setAccessible(true); setView(field, activity, av.id()); } } } catch (Exception e) { e.printStackTrace(); } } private static void setView(Field view, Activity activity, int id) throws IllegalArgumentException, IllegalAccessException { view.set(activity, activity.findViewById(id)); } }
package com.ferris.ioc; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface ClickMethod { int[] value() default {}; }
package com.ferris.ioc; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) public @interface InjectView { public int id(); public String clickMethod() default ""; // 點擊回調方法(方法參數必須只有一個View!) }//綁定方法事件觸發管理類,管理類比較簡單,我簡單注釋了下。相信看起來容易了
package com.ferris.ioc; import java.lang.reflect.Method; import java.util.HashMap; import java.util.Map; import android.annotation.SuppressLint; import android.app.Activity; import android.text.TextUtils; import android.view.View; import android.view.View.OnClickListener; @SuppressLint("UseSparseArrays") public class OnEventListener implements OnClickListener{ private Activity activity; private static Maplisteners = new HashMap (); //我們保存著控件ID以及方法名稱的關聯 public OnEventListener(Activity activity) { // TODO Auto-generated constructor stub this.activity=activity; } public OnEventListener() { } public OnEventListener setmClick(Integer id,String name) { //添加關聯,並返回監聽接口給View進行設置監聽 // TODO Auto-generated method stub listeners.put(id, name); return this; } @Override public void onClick(View v) { //當有事件觸發,則通過id去獲取對應的方法,傳遞參數給方法觸發對應的方法。即可 // TODO Auto-generated method stub if(listeners==null||listeners.size()<=0){ return; } String methodName=listeners.get(v.getId()); if(TextUtils.isEmpty(methodName)){ return; } try { //通過類去查找對應的方法以及參數類型 Method callbackMethod = activity.getClass().getDeclaredMethod(methodName, View.class); callbackMethod.setAccessible(true); //傳遞對應的參數過去 callbackMethod.invoke(activity, v); } catch (Exception e) { e.printStackTrace(); } } }
android手機內存本來就不大,要是老把數據放在手機裡,很明顯會讓手機的使用者體驗到什麼是“卡”,所以,我們把數據要放到SD卡中,以減少手機內存的使用,本文僅寫入文件
本文實例講述了android編程實現懸浮窗體的方法。分享給大家供大家參考,具體如下:突然對懸浮窗體感興趣,查資料做了個小Demo,效果是點擊按鈕後,關閉當前Activit
如圖:>刪除過渡動畫>拖拽排序
DrawerLayout顧名思義就是一個管理布局的。使用方式可以與其它的布局類類似。DrawerLayout帶有滑動的功能。只要按照drawerLayout的規定布局方式