Android 开发常用技巧(持续更新...)

    xiaoxiao2021-03-25  109

    原创文章,欢迎转载。转载请注明来源: http://blog.csdn.net/hust_twj/article/details/61200354

    文章目录

    1、防止按钮快速点击的工具类:2、XML中添加点击事件3、创建用于管理所有活动的类:4、扩大点击区域的两种方式:4.1 padding4.2 TouchDelegate 5、给 ImageView 加遮罩(蒙层):6、定义 Layout布局 时向上转为基类 View7、static 修饰 内部类

    1、防止按钮快速点击的工具类:

    private static final int MIN_DELAY_TIME= 1000; // 两次点击间隔不能少于1000ms private static long lastClickTime; public static boolean isFastClick() { boolean flag = true; long currentClickTime = System.currentTimeMillis(); if ((currentClickTime - lastClickTime) >= MIN_DELAY_TIME) { flag = false; } lastClickTime = currentClickTime; return flag; }

    2、XML中添加点击事件

    需要监听按钮的点击事件时,若按钮较多,可以在 xml 文件中添加android:onClick="add"属性,然后在 Activity 中添加对应的方法即可。,方法签名为:public void add(View view)。

    <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="add"/>

    3、创建用于管理所有活动的类:

    public class ActivityCollector { public static List<Activity> activities = new ArrayList<>(); public static void addActivity(Activity activity){ activities.add(activity); } public static void removeActivity(Activity activity){ activities.remove(activity); } public static void finishAllActivities(){ for(Activity activity: activities){ if (!activity.isFinishing()){ activity.finish(); } } } }

    创建BaseActivity 作为所有活动的父类:

    public class BaseActivity extends AppCompatActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); ActivityCollector.addActivity(this); } @Override protected void onDestroy() { super.onDestroy(); ActivityCollector.removeActivity(this); } }

    4、扩大点击区域的两种方式:

    4.1 padding

    针对按钮的可点击区域较小的情况,可以使用控件的 paddingxxx属性替代部分 marginxxx 属性。margin属性指的控件之外的区域,padding则可以将这些区域归为自身所有,这样既可在不改变 UI 的情况下扩大点击区域。

    4.2 TouchDelegate

    使用padding的方法,有时候无法满足需求。比如ImageView设置padding后,图片会变小。

    Android 提供了 TouchDelegate 类,让父视图能够将子视图的可轻触区域扩展到子视图的边界之外。当子视图必须很小,但应该具有更大的轻触区域时,此方法很有用。不过这种方稍显复杂。 可以参考官方介绍: https://developer.android.com/training/gestures/viewgroup.html#delegate

    5、给 ImageView 加遮罩(蒙层):

    在 ImageView 外套一层 FrameLayout,设置 FrameLayout 的**foreground**属性。 参考:http://blog.csdn.net/carlin321/article/details/36480251

    6、定义 Layout布局 时向上转为基类 View

    在 activity 中定义 xml 中继承自 ViewGroup(如FrameLayout、LinearLayout、RelativeLayout等)的元素用 View 修饰,而非具体的xxxLayout,这样当 xml 布局修改时 activity 中相应的定义不用改变,如 FrameLayout:

    <FrameLayout android:id="@+id/layout_photo_album" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/img_bg_avatar" android:layout_toEndOf="@+id/img_avatar" android:layout_marginEnd="10dp"> </FrameLayout>

    定义如下:

    View layoutPhotoAlbum; layoutPhotoAlbum = findViewById(R.id.layout_photo_album);

    7、static 修饰 内部类

    没有引用外部类的内部类,最好设置为 static ,这样可以避免非静态内部类的弊端:持有外部引用、有可能内存泄漏。比如说一般的 Adapter 中的 ViewHolder。

    转载请注明原文地址: https://ju.6miu.com/read-22859.html

    最新回复(0)