精华内容
下载资源
问答
  • android UI框架 实例项目 demo 如图,有源码,可以运行。
  • Android UI实战

    万人学习 2019-07-20 09:35:39
    本课程包含19章,共计70个小节课程,内容包括: Android 常用组件,Toast,Button,CheckBox,Radio Button,Toggle Buttons,Switch,SeekBar,RatingBar等,高级组件:ListView、GridView、ViewPager、...
  • 《精通Android UI设计》

    2017-11-23 10:00:29
    本书详细阐述了与 Android UI开发相关的基本解决方案,主要包括 Android UI设计工具, Android UI布局, Android UI Widgets,Android UI选项菜单, Android UI本地菜单, Android UI操作栏, Android UI设计考虑, ...
  • AndroidUI图标下载

    千次下载 热门讨论 2015-08-28 11:13:40
    android常用的界面图标,包括一些常用的布局图标,适合最新的界面ui布局
  • android UI界面开发图片

    热门讨论 2012-11-10 13:44:37
    android UI界面开发图片,数量巨大,而且经典,觉得值得收藏 android UI界面开发图片,数量巨大,而且经典,觉得值得收藏
  • Android UI界面源码

    2012-09-21 15:05:53
    Android UI界面源码
  • android ui设计 android源码 android开源项目 android项目代码 androidui设计,UI小练习
  • 第四章 Android UI开发基础目录CONTENTSAndroid UI框架常见的基本控件五大布局Android UI框架View和ViewGroupAndroid UI框架UI分类Android UI框架Android UI开发界面布局开发控件开发AdapterView与Adapter开发UI组件...
  • Android UI线程和非UI线程

    千次阅读 2018-07-27 17:30:34
    Android UI线程和非UI线程 UI线程及Android的单线程模型原则  当应用启动,系统会创建一个主线程(main thread)。  这个主线程负责向UI组件分发事件(包括绘制
    原文地址为:
    Android UI线程和非UI线程
    

     

    Android UI线程和非UI线程

     

    UI线程及Android的单线程模型原则

      当应用启动,系统会创建一个主线程(main thread)

      这个主线程负责向UI组件分发事件(包括绘制事件),也是在这个主线程里,你的应用和Android的UI组件(components from the Android UI toolkit (components from the android.widget and android.view packages))发生交互。

      所以main thread也叫UI thread也即UI线程

     

      系统不会为每个组件单独创建线程,在同一个进程里的UI组件都会在UI线程里实例化,系统对每一个组件的调用都从UI线程分发出去

      结果就是,响应系统回调的方法(比如响应用户动作的onKeyDown()和各种生命周期回调)永远都是在UI线程里运行。

     

      当App做一些比较重(intensive)的工作的时候,除非你合理地实现,否则单线程模型的performance会很poor。

      特别的是,如果所有的工作都在UI线程,做一些比较耗时的工作比如访问网络或者数据库查询,都会阻塞UI线程导致事件停止分发(包括绘制事件)。对于用户来说,应用看起来像是卡住了,更坏的情况是,如果UI线程blocked的时间太长(大约超过5秒),用户就会看到ANRapplication not responding)的对话框。

      另外,Andoid UI toolkit并不是线程安全的,所以你不能从非UI线程来操纵UI组件。你必须把所有的UI操作放在UI线程里,所以Android的单线程模型有两条原则:

      1.不要阻塞UI线程。

      2.不要在UI线程之外访问Android UI toolkit(主要是这两个包中的组件:android.widget and android.view)。

     

    使用Worker线程

      根据单线程模型的两条原则,首先,要保证应用的响应性,不能阻塞UI线程,所以当你的操作不是即时的那种(not instantaneous),你应该把他们放进单另的线程中(叫做background或者叫worker线程)。

      比如点击按钮后,下载一个图片然后在ImageView中展示:

    public void onClick(View v) {
    new Thread(new Runnable() {
    public void run() {
    Bitmap b
    = loadImageFromNetwork("http://example.com/image.png");
    mImageView.setImageBitmap(b);
    }
    }).start();
    }

     

      这段代码用新的线程来处理网络操作,但是它违反了第二条原则:

      Do not access the Android UI toolkit from outside the UI thread.

      从非UI线程访问UI组件会导致未定义和不能预料的行为

     

      为了解决这个问题,Android提供了一些方法,从其他线程访问UI线程:

     

      比如,上面这段代码可以这么改:

    public void onClick(View v) {
    new Thread(new Runnable() {
    public void run() {
    final Bitmap bitmap = loadImageFromNetwork("http://example.com/image.png");
    mImageView.post(
    new Runnable() {
    public void run() {
    mImageView.setImageBitmap(bitmap);
    }
    });
    }
    }).start();
    }

     

      这么改之后就是线程安全的了。

      但是,当操作变得复杂的时候,这种代码会变得非常复杂,为了处理非UI线程和UI线程之间更加复杂的交互,可以考虑在worker线程中使用一个Handler,来处理UI线程中传来的消息。

      也可以继承这个类AsyncTask 。

     

    Communicating with the UI Thread

      只有在UI线程中的对象才能操作UI线程中的对象,为了将非UI线程中的数据传送到UI线程,可以使用一个 Handler运行在UI线程中。

      Handler是Android framework中管理线程的部分,一个Handler对象负责接收消息然后处理消息。

      你可以为一个新的线程创建一个Handler,也可以创建一个Handler然后将它和已有线程连接。

      如果你将一个Handler和你的UI线程连接,处理消息的代码就将会在UI线程中执行。

     

      可以在你创建线程池的类的构造方法中实例化Handler的对象,然后用全局变量存储这个对象。

      要和UI线程连接,实例化Handler的时候应该使用Handler(Looper) 这个构造方法。

      这个构造方法使用了一个 Looper 对象,这是Android系统中线程管理的framework的另一个部分。

      当你用一个特定的 Looper实例来创建一个 Handler时,这个 Handler就运行在这个 Looper的线程中。

     

      在Handler中,要覆写handleMessage() 方法。Android系统会在Handler管理的相应线程收到新消息时调用这个方法

      一个特定线程的所有Handler对象都会收到同样的方法。(这是一个“一对多”的关系)。

     

    参考资料

      官方Training: 与UI线程通信:

      http://developer.android.com/training/multiple-threads/communicate-ui.html

      Guides: Processes and Threads

      http://developer.android.com/guide/components/processes-and-threads.html

     

      类参考:

      http://developer.android.com/reference/android/os/Looper.html

      http://developer.android.com/reference/android/os/Handler.html

      http://developer.android.com/reference/android/os/HandlerThread.html

     

      博客:

      Android的线程使用来更新UI----Thread、Handler、Looper、TimerTask等:

      http://www.cnblogs.com/playing/archive/2011/03/24/1993583.html

     


    转载请注明本文地址: Android UI线程和非UI线程
    展开全文
  • Android UI性能优化 检测应用中的UI卡顿

    万次阅读 多人点赞 2017-03-01 08:28:39
    本文已在我的公众号hongyangAndroid首发。...在做app性能优化的时候,大家都希望能够写出丝滑的UI界面,以前写过一篇博客,主要是基于Google当时发布的性能优化典范,主要提供一些UI优化性能示例:

    本文已在我的公众号hongyangAndroid首发。
    转载请标明出处:
    http://blog.csdn.net/lmj623565791/article/details/58626355
    本文出自张鸿洋的博客

    一、概述

    在做app性能优化的时候,大家都希望能够写出丝滑的UI界面,以前写过一篇博客,主要是基于Google当时发布的性能优化典范,主要提供一些UI优化性能示例:

    实际上,由于各种机型的配置不同、代码迭代历史悠久,代码中可能会存在很多在UI线程耗时的操作,所以我们希望有一套简单检测机制,帮助我们定位耗时发生的位置。

    本篇博客主要描述如何检测应用在UI线程的卡顿,目前已经有两种比较典型方式来检测了:

    1. 利用UI线程Looper打印的日志
    2. 利用Choreographer

    两种方式都有一些开源项目,例如:

    其实编写本篇文章,主要是因为发现一个还比较有意思的方案,该方法的灵感来源于一篇给我微信投稿的文章:

    该项目主要用于捕获UI线程的crash,当我看完该项目原理的时候,也可以用来作为检测卡段方案,可能还可以做一些别的事情。

    所以,本文出现了3种检测UI卡顿的方案,3种方案原理都比较简单,接下来将逐个介绍。

    二、利用loop()中打印的日志

    (1)原理

    大家都知道在Android UI线程中有个Looper,在其loop方法中会不断取出Message,调用其绑定的Handler在UI线程进行执行。

    大致代码如下:

    public static void loop() {
        final Looper me = myLooper();
    
        final MessageQueue queue = me.mQueue;
        // ...
        for (;;) {
            Message msg = queue.next(); // might block
            // This must be in a local variable, in case a UI event sets the logger
            Printer logging = me.mLogging;
            if (logging != null) {
                logging.println(">>>>> Dispatching to " + msg.target + " " +
                        msg.callback + ": " + msg.what);
            }
            // focus
            msg.target.dispatchMessage(msg);
    
            if (logging != null) {
                logging.println("<<<<< Finished to " + msg.target + " " + msg.callback);
            }
    
            // ...
            }
            msg.recycleUnchecked();
        }
    }

    所以很多时候,我们只要有办法检测:

    msg.target.dispatchMessage(msg);

    此行代码的执行时间,就能够检测到部分UI线程是否有耗时操作了。可以看到在执行此代码前后,如果设置了logging,会分别打印出>>>>> Dispatching to<<<<< Finished to这样的log。

    我们可以通过计算两次log之间的时间差值,大致代码如下:

    public class BlockDetectByPrinter {
    
        public static void start() {
    
            Looper.getMainLooper().setMessageLogging(new Printer() {
    
                private static final String START = ">>>>> Dispatching";
                private static final String END = "<<<<< Finished";
    
                @Override
                public void println(String x) {
                    if (x.startsWith(START)) {
                        LogMonitor.getInstance().startMonitor();
                    }
                    if (x.startsWith(END)) {
                        LogMonitor.getInstance().removeMonitor();
                    }
                }
            });
    
        }
    }

    假设我们的阈值是1000ms,当我在匹配到>>>>> Dispatching时,我会在1000ms毫秒后执行一个任务(打印出UI线程的堆栈信息,会在非UI线程中进行);正常情况下,肯定是低于1000ms执行完成的,所以当我匹配到<<<<< Finished,会移除该任务。

    大概代码如下:

    public class LogMonitor {
    
        private static LogMonitor sInstance = new LogMonitor();
        private HandlerThread mLogThread = new HandlerThread("log");
        private Handler mIoHandler;
        private static final long TIME_BLOCK = 1000L;
    
        private LogMonitor() {
            mLogThread.start();
            mIoHandler = new Handler(mLogThread.getLooper());
        }
    
        private static Runnable mLogRunnable = new Runnable() {
            @Override
            public void run() {
                StringBuilder sb = new StringBuilder();
                StackTraceElement[] stackTrace = Looper.getMainLooper().getThread().getStackTrace();
                for (StackTraceElement s : stackTrace) {
                    sb.append(s.toString() + "\n");
                }
                Log.e("TAG", sb.toString());
            }
        };
    
        public static LogMonitor getInstance() {
            return sInstance;
        }
    
        public boolean isMonitor() {
            return mIoHandler.hasCallbacks(mLogRunnable);
        }
    
        public void startMonitor() {
            mIoHandler.postDelayed(mLogRunnable, TIME_BLOCK);
        }
    
        public void removeMonitor() {
            mIoHandler.removeCallbacks(mLogRunnable);
        }
    
    }

    我们利用了HandlerThread这个类,同样利用了Looper机制,只不过在非UI线程中,如果执行耗时达到我们设置的阈值,则会执行mLogRunnable,打印出UI线程当前的堆栈信息;如果你阈值时间之内完成,则会remove掉该runnable。

    (2)测试

    用法很简单,在Application的onCreate中调用:

    BlockDetectByPrinter.start();

    即可。

    然后我们在Activity里面,点击一个按钮,让睡眠2s,测试下:

    findViewById(R.id.id_btn02)
        .setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                try {
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
                }
            }
        });

    运行点击时,会打印出log:

    02-21 00:26:26.408 2999-3014/com.zhy.testlp E/TAG: 
    java.lang.VMThread.sleep(Native Method)
       java.lang.Thread.sleep(Thread.java:1013)
       java.lang.Thread.sleep(Thread.java:995)
       com.zhy.testlp.MainActivity$2.onClick(MainActivity.java:70)
       android.view.View.performClick(View.java:4438)
       android.view.View$PerformClick.run(View.java:18422)
       android.os.Handler.handleCallback(Handler.java:733)
       android.os.Handler.dispatchMessage(Handler.java:95)

    会打印出耗时相关代码的信息,然后可以通过该log定位到耗时的地方。

    三、 利用Choreographer

    Android系统每隔16ms发出VSYNC信号,触发对UI进行渲染。SDK中包含了一个相关类,以及相关回调。理论上来说两次回调的时间周期应该在16ms,如果超过了16ms我们则认为发生了卡顿,我们主要就是利用两次回调间的时间周期来判断:

    大致代码如下:

    public class BlockDetectByChoreographer {
        public static void start() {
            Choreographer.getInstance()
                .postFrameCallback(new Choreographer.FrameCallback() {
                    @Override
                    public void doFrame(long l) {
                        if (LogMonitor.getInstance().isMonitor()) {
                            LogMonitor.getInstance().removeMonitor();                    
                        } 
                        LogMonitor.getInstance().startMonitor();
                        Choreographer.getInstance().postFrameCallback(this);
                    }
            });
        }
    }

    第一次的时候开始检测,如果大于阈值则输出相关堆栈信息,否则则移除。

    使用方式和上述一致。

    四、 利用Looper机制

    先看一段代码:

    new Handler(Looper.getMainLooper())
            .post(new Runnable() {
                @Override
                public void run() {}
           }

    该代码在UI线程中的MessageQueue中插入一个Message,最终会在loop()方法中取出并执行。

    假设,我在run方法中,拿到MessageQueue,自己执行原本的Looper.loop()方法逻辑,那么后续的UI线程的Message就会将直接让我们处理,这样我们就可以做一些事情:

    public class BlockDetectByLooper {
        private static final String FIELD_mQueue = "mQueue";
        private static final String METHOD_next = "next";
    
        public static void start() {
            new Handler(Looper.getMainLooper()).post(new Runnable() {
                @Override
                public void run() {
                    try {
                        Looper mainLooper = Looper.getMainLooper();
                        final Looper me = mainLooper;
                        final MessageQueue queue;
                        Field fieldQueue = me.getClass().getDeclaredField(FIELD_mQueue);
                        fieldQueue.setAccessible(true);
                        queue = (MessageQueue) fieldQueue.get(me);
                        Method methodNext = queue.getClass().getDeclaredMethod(METHOD_next);
                        methodNext.setAccessible(true);
                        Binder.clearCallingIdentity();
                        for (; ; ) {
                            Message msg = (Message) methodNext.invoke(queue);
                            if (msg == null) {
                                return;
                            }
                            LogMonitor.getInstance().startMonitor();
                            msg.getTarget().dispatchMessage(msg);
                            msg.recycle();
                            LogMonitor.getInstance().removeMonitor();
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
    
                }
            });
        }
    }
    

    其实很简单,将Looper.loop里面本身的代码直接copy来了这里。当这个消息被处理后,后续的消息都将会在这里进行处理。

    中间有变量和方法需要反射来调用,不过不影响查看msg.getTarget().dispatchMessage(msg);执行时间,但是就不要在线上使用这种方式了。

    不过该方式和以上两个方案对比,并无优势,不过这个思路挺有意思的。

    使用方式和上述一致。

    最后,可以考虑将卡顿日志输出到文件,慢慢分析;可以结合上述原理以及自己需求开发做一个合适的方案,也可以参考已有开源方案。

    参考

    我的微信公众号:hongyangAndroid
    (可以给我留言你想学习的文章,支持投稿)

    展开全文
  • github上很火的一个Android UI框架,SlidingMenu.已经将所需要的Actionbarssherlock和SlidingMenu库打包好。下载后解压并且,将Actionbarssherlock,SlidingMenu和SlidingMenuExample这三个文件夹import到eclipse中...
  • AndroidAndroid UI 开发_习题

    千次阅读 2020-04-14 23:41:46
    theme/Theme.Dialog" Android UI开发中,设置线性布局为垂直显示需修改的属性的() A、android:orientation="vertical" B、android:orientation=“horizontal” C、android:layout_centerHorizontal=“true” D、...

    • ByMyself

    单选题

    下列表示Toast较长时间显示的是()。

    • A、Toast.LENGTH_LONG
      B、Toast.LONG
      C、Toast.LENGTH_SHORT
      D、Toast.SHORT

    在相对布局文件中,把控件显示在另外一个控件的右侧使用的属性是()

    • A、layout_toRightOf
      B、layout_toLeftOf
      C、layout_toStartOf
      D、layout_toEndOf(末端)

    在帧布局中的子控件默认是()对齐的。

    • A、右上角
      B、左上角
      C、左下角
      D、右下角

    Android相对布局中,使控件相对父控件底部对齐使用的属性是()。

    • A、android:layout_alignParentBottom
      B、android:layout_alignBottom
      C、android:layout_alignBaseline
      D、android:layout_alignParentTop

    在下列选项中,用于给Activity指定主题的属性是()

    • A、icon
      B、label
      C、theme
      D、style

    Android UI开发中,如果TableLayout的第一个TableRow有两个控件,第二个TableRow有三个控件,那这个TableLayout就有()列。

    • A、1
      B、2
      C、3
      D、4

    在下列选项中,用于给控件指定主题的属性是()

    • A、icon
      B、label
      C、theme
      D、style

    绝对布局的标签名称是()

    • A、FrameLayout
      B、LinearLayout
      C、RelativeLayout
      D、AbsoluteLayout

    在相对布局文件中,把控件与另外一个控件的下边对齐使用的属性是()

    • A、layout_above
      B、padding
      C、layout_below
      D、layout_margin

    在下列选项中,设置GridLayout中的某控件占3行的是()

    • A、android:rowSpan=“3”
      B、android:layout_rowSpan="3"
      C、android:layout_columnSpan=“3”
      D、android:layout_column=“3”

    Android UI开发中,设置Activity的()属性可以使Activity显示为对话框样式

    • A、android:theme="@android:style/Theme.Dialog" (@style/Theme.AppCompat.Dialog)
      B、android:style="@android:style/Theme.Dialog"
      C、android:theme="@android:theme/Theme.Dialog"
      D、android:style="@android:theme/Theme.Dialog"

    Android UI开发中,设置线性布局为垂直显示需修改的属性的()

    • A、android:orientation="vertical"
      B、android:orientation=“horizontal”
      C、android:layout_centerHorizontal=“true”
      D、android:layout_centerVertical=“true”

    Android UI开发中,如何设置GridLayout列数为4()。

    • A、android:columnCount="4"
      B、android:layout_columnCount=“4”
      C、android:column=“4”
      D、android:stretchColumns=“4”

    在Android UI开发中,常见的刮刮卡是通过()实现的。

    • A、FrameLayout
      B、LinearLayout
      C、RelativeLayout
      D、TableLayout

    样式文件是在( )目录下创建的。

    • A、colors
      B、dimens
      C、strings
      D、styles

    在网格布局中,设置列数的属性是()

    • A、column
      B、columnCount
      C、layout_columnCount
      D、stretchColumns

    在下列选项中,设置线性布局方向的属性是()

    • A、orientation
      B、gravity
      C、layout_gravity
      D、padding

    在布局文件中,给Button指定单击事件响应方法的属性是()

    • A、onClick
      B、hint
      C、enabled
      D、focusable

    Android相对布局中,要使A控件在B控件的下方,A控件需添加的属性是()

    • A、android:layout_above
      B、android:layout_alignBaseline
      C、android:layout_below
      D、android:layout_alignBottom

    Android UI开发中,TableLayout的stretchColumns属性表示()

    • A、TableLayout的列数
      B、TableLayout的行数
      C、TableLayout最多能加入的列数
      D、拉伸指定列填充满TableLayout

    在下列选项中,关于TableRow标签的说法正确的是()

    • A、在GridView里面表示一行
      B、是五种布局的一种
      C、是表格布局里面表示一行的标签
      D、在listView里面表示一行

    在线性布局文件中,把方向设置为水平方的属性是()

    • A、vertical
      B、horizontal
      C、fill_vertical
      D、fill_horizontal

    放入绝对布局中的控件需要通过______两个属性指定其准确的坐标值

    • A、android:width和android:height
      B、android:layout_width和android:layout_height
      C、android:x和android:y
      D、android:layout_x和android:layout_y

    注:一般前缀layout_的都是指其在父视图中的属性,没有该前缀一般是指其内容

    Android UI开发中,在GridLayout中如何设置某控件占3行()

    • A、android:layout_columnSpan=“3”
      B、android:layout_rowSpan="3"
      C、android:rowSpan=“3”
      D、android:layout_column=“3”

    在下列选项中,表示Toast较短时间显示信息的是()。

    • A、Toast.LENGTH_LONG
      B、Toast.LONG
      C、Toast.LENGTH_SHORT
      D、Toast.SHORT

    判断题

    • 在Android UI开发中,通常情况下使用主题定义一个界面或者整个软件界面的风格,使用样式定义控件的风格。
    • Android UI开发中,线性布局默认为水平显示。
    • 在Activity代码中同样也可以引用自定义主题,只需要在Activity类onCreate()方法内添加setTheme()方法即可。
    • Android中的网格布局使用GridLayout控件表示。
    • Toast.makeText(context,text,time)必须在调用了show()方法后才能把信息显示出来。
    • Android UI开发中,如果一个应用中使用了主题,同时应用下的View也使用了样式,那么当主题和样式中的属性发生冲突时,主题的优先级高于样式。
    • Android UI开发中,文本框可以在界面上显示文字,通常作为提示信息展示。
    • 当用@string/xxx方式引用一个文本资源时,Android系统会首先判断手机设置的语言和地区,然后通过这些信息去对应values目录下strings.xml文件,引用其中的内容。
    • 帧布局在界面上是一帧一帧显示的。 (改)
    • 国际化Internationalization这个单词的首字母“I”和尾字母“N”之间有18个字符,因此国际化被简称为I18N。
    • Android 代码中加入Toast.makeText(Context,Text,Time);即可显示Toast。
    • Android UI开发中,相对布局通常有两种形式,一种是相对于容器而言的,一种是相对于控件而言的。
    • 样式中的< item>标签是用来声明属性值的。
    • TextView控件通常用于在界面上显示文字信息。
    • 理论上绝对布局可以完成任何的布局设计,且灵活性很大,所以开发中推荐使用绝对布局。
    • TableLayout可以将视图按照行、列进行排列。
    • 相对布局中的控件都是按照相对位置摆放的。
    • 绝对布局灵活性很大, 可以完成任何的布局设计,所以开发中推荐使用绝对布局。
    • 在线性布局文件中,如果把方向设置为水平方向,控件会摆放在同一行。

    填空题

    当主题和样式中的属性发生冲突时,主题的优先级要低于样式。

    Android UI开发中,网格布局是Android4.0新增的布局,它实现了控件的交错显示,能够避免因布局嵌套对设备性能的影响,更利于自由布局的开发。

    Android开发中,想让软件支持简体中文、美式英语两种环境,需要在res目录下新建两个values文件夹,分别命名为values-zh values-en

    Android UI开发中,线性布局主要有两种形式,一种是水平线性布局,一种是垂直线性布局

    帧布局(FrameLayout) 是Android布局中最简单的一种,为每个加入其中的控件创建一个空白区域(称为一帧,每个控件占据一帧)

    Android UI开发中,TableLayout的行数由TableRow对象控制的

    Theme 是应用到整个Activity和Application的样式。

    在Android系统中,线性布局使用LinearLayout控件表示。

    Android系统中,theme 用于定义布局显示在界面上的风格

    Toast.makeText(Context,Text,Time)中的“Time”表示显示时长,该属性有特定的值,Toast.LENGTH_LONG表示较长时间显示,Toast.LENGTH_SHORT表示较短时间显示

    主题与样式在代码结构上是一样的,不同之处在于主题的引用要在AndroidManifest.xml文件中引用。

    Android有自己的国际化规范和方法,布局中所有文字资源只有通过@string/name方式引用才能起到效果

    @[<package_name>:]<resource_type>/<resource_name>
    

    在清单文件中,< application>标签中的andorid:theme属性,代表的是 APP 主题的样式,而< activity>标签中是改变该Activity主题的样式

    Android系统中,style 用于定义控件的风格

    在Activity代码中同样也可以引用自定义主题,只需要在Activity类onCreate()方法内添加setTheme() 方法即可。

    绝对布局(AbsoluteLayout) 需要通过指定x、y坐标来控制每一个组件的位置,放入该布局的组件需要通过android:layout_x和android:layout_y两个属性指定其准确的坐标值,并显示在屏幕上。

    Toast.makeText(context,text,time)中的text是Toast显示的内容

    EditText控件中可以输入文字,并且可以通过inputType属性控制输入的内容只能是数字或者字母等。

    网格布局的标签是GridLayout

    相对布局的标签是RelativeLayout

    帧布局的标签是FrameLayout

    国际化Internationalization这个单词的首字母“I”和尾字母“N”之间有18个字符,因此国际化被简称为I18N

    表格布局的标签是TableLayout


    End.

    展开全文
  • 各种Android UI开源框架

    万次阅读 多人点赞 2018-01-25 11:23:42
    自己总结的Android开源项目及库。 github排名 https://github.com/trending,github搜索:https://github.com/search Android库学习收集QQ群: 339129051 欢迎入群。 目录 UI UI卫星菜单节选器下拉刷新模糊效果HUD与...


    自己总结的Android开源项目及库。 github排名 https://github.com/trending,github搜索:https://github.com/search
    Android库学习收集QQ群: 339129051  欢迎入群。

    目录

    具体内容 =============================

    UI
    卫星菜单
    • android-satellite-menu - 点击主按钮,会弹出多个围绕着主按钮排列的子按钮,从而形成一个弹出式菜单。子按钮弹出和消失的动画效果都很棒。这种弹出式菜单按钮应用在Path app中。
    • ArcMenu - 实现弹出式按钮群(菜单)。点击主按钮,会在住按钮旁边弹出多个按钮(菜单)。弹出的按钮有两种排列形式,一种是围绕着主按钮成圆弧形排列,一种是和主按钮并排成一字型排列, 仿Path 2.0 (for iOS)。
    • Radial Menu Widget - 实现各种圆形或者半圆形菜单,以及圆形进度条。
    • android-circlebutton - 圆形按钮,有动画点击效果。
    • CircularFloatingActionMenu - 卫星菜单。
    • ElasticDownload - 挺酷的下载进度条。
    • android-snake-menu - 仿 Tumblr 的 Android 可拖拽蛇形动画菜单。
    节选器
    • SegmentView - 类似iOS的Segment Control控件,第一种方式是使用 RadioGroup 实现,O网页链接。
    • SHSegmentControl - 类似iOS的Segment Control控件,此种方式的可定制化更好。
    • android-segmentedradiobutton - 在Android中实现类似iOS的分段单选按钮(segmented control),本人以前项目一直使用,值得拥有。
    • android-segmented-control - RadioGroup实现类似ios的分段选择(UISegmentedControl)控件。
    下拉刷新
    • Android-Ptr-Comparison - Android 下拉刷新开源库对比,非常nice!!
    • Android-PullToRefresh - 最经典、最多人用的下拉刷新、加载更多。
    • PullDownListView - 一个下拉刷新的控件,实现了仿微信下拉中眼睛动画的效果。
    • DragTopLayout - 实现整个layout下拉刷新。
    • ZrcListView - 一个顺滑又漂亮的Android下拉刷新与加载更多列表组件,增加下拉刷新及滚动到底部自动加载的功能;增加越界回弹效果;增加自定义列表项动画的功能。
    • TwitterCover-Android - Twitter Android客户端的下拉封面模糊效果。
    • android-Ultra-Pull-To-Refresh - 实现整个layout下拉刷新,没有加载更过,Demo, 源码分析
    • StikkyHeader - 【Android控件源码:头部固定的控件列表效果】这是一个可以支持头部固定的控件列表功能,源码StikkyHeader,StikkyHeader是一个可以在滚动的时候将头部固定的控件,还可以将动画效果和StikkyHeader一起使用,api非常简单, 支持ListView,RecyclerView,ScrollView。支持2.3一下设备使用的StikkyHeader
    • PullDownListView - 实现了模仿微信眼睛下拉效果,源码PullDownListView,下拉刷新,上拉加载,模仿微信眼睛。
    • CircleRefreshLayout - 又一个下拉刷新的实现,水滴效果。
    • BGARefreshLayout-Android - 多种下拉刷新效果、上拉加载更多、可配置自定义头部广告位,目前已经实现了四种下拉刷新效果:新浪微博下拉刷新风格、慕课网下拉刷新风格、美团下拉刷新风格、类似qq好友列表黏性下拉刷新风格。
    • Pull-to-Refresh.Rentals-Android - 提供一个简单可以自定义的下拉刷新实现。
    • Pull-to-Refresh.Tours - Taurus,很精美的下拉刷新。
    • ParallaxListView - 模仿Path的下拉刷新,Head头部图片下拉放大。
    • WaveRefreshForAndroid - 下拉刷新水波纹动画。
    • CoordinatorLayoutDemos - 收集了不少资源写了一个基于CoordinatorLayout实现的下拉刷新效果。
    • Android_PullToRefreshLibrary_Collection - 下拉刷新开源库集锦 。
    • HitBlockRefresh - 下拉刷新:打砖块和打坦克。
    模糊效果
    HUD与Toast
    • android-UCToast - 在不申请任何权限的情况下在 Android 应用中弹出悬浮窗,实现文档
    • sweet-alert-dialog - sweet-alert-dialog是一款清新文艺的 Android 弹窗, 灵感来自于 JS 版的 SweetAlert。
    进度条
    • easyloadingbtn - 模仿了一个Dribbble上的Material Design效果,环形loading, 进度条、进度圈。
    • android-square-progressbar - 一个不错的方形进度条。
    • Radial Menu Widget - 实现各种圆形或者半圆形菜单,以及圆形进度条。
    • AnimatedCircleLoadingView - 一个有限/无限加载动画效果。基于Nils Banner的android-watch-loading-animation设计图。该设计本来是针对智能手表的。
    • circular-progress-button - 带动态效果的Button(按钮)可要比静态的按钮炫酷的多了,大家看到效果图就知道了。
    • CircularBarPager - Android实现的动态效果,一个数字圆圈进度效果,源码CircularBarPager,material 风格的数字圆圈进度显示库(api10 +)。
    • dotted-progress-bar - 一个小清新的进度条。
    • WhorlView - 一个炫酷的漩涡加载效果自定义View。
    • AVLoadingIndicatorView - AVLoadingIndicatorView整合了一些漂亮的 Android 动画加载效果。
    • MagicProgressWidget - 渐变的圆形进度条与轻量横向进度条。
    • GBSlideBar - GBSlideBar类似uber/滴滴等app的滑动选择工具条。
    • GifLoadingView - 一些好看的 loadingview。
    • HouseLoading - 一个有趣的android加载loading动画。实现原理

    UI其他
    • MixtureTextView - 富文本,支持Android图文混排、文字环绕图片等效果。
    • android-ActionQueue - Action Queue 用于执行有次序的队列操作,比如按次序弹出对话框,这在 Android 中尤其有用。
    • WheelView-Android - WheelView-Android 是一款开源的 Android 滚动选择控件, 适用于不少应用场景。
    • Android Wheel - 带有刻度的旋转器:日历、三级联动。
    • CharacterPickerView - 可实现三级联动的选择器,高仿iOS的滚轮控件,可实现单项选择,并支持一二三级联动效果。
    • Highlight - Highlight一款可应用于 Android 应用上的指向性功能高亮的库, 可以快速的给应用添加上应用引导的效果。
    • HeaderAndFooterRecyclerView - 支持addHeaderView、 addFooterView、分页加载的RecyclerView解决方案 。
    • CleverRecyclerView - 是一个基于RecyclerView的扩展库,提供了与ViewPager类似的滑动效果并且添加了一些有用的特性。
    • drag-select-recyclerview - 实现了类似 Google Photos 风格的图片多选效果。
    • FlycoTabLayout - 一个Android TabLayout库,目前有两个TabLayout:SlidingTabLayout、CommonTabLayout。
    • AndroidChangeSkin - 一种完全无侵入的 Android 应用换肤方式,支持插件式和应用内换肤,无需重启 Activity。
    • Lobsterpicker - Lobsterpicker 为 Android 开发者提供了满足 Material Design 风格的颜色选择器。
    • FlycoRoundView - 一个扩展原生控件支持圆角矩形框背景的库,可以减少相关shape资源文件使用。
    • FlowingDrawer - FlowingDrawer 一个弹性效果的抽屉菜单,图片是概念图,实际效果实现了70%(侧滑菜单)。
    • TextSurface -是用 Java 写的一款借助酷炫的动画效果来完成消息展示的微型动画框架。
    • android-animate-RichEditor -android-animate-RichEditor是一款支持图片插入动画效果的 Android 富文本编辑器。
    • FlycoPageIndicator - android-animate-RichEditor是一款支持图片插入动画效果的 Android 富文本编辑器。
    • AndroidMosaicLayout - 马赛克效果 Layout,磁片风格View 自适应大小。
    • DropDownMenu - 一个实用的多条件筛选菜单,在很多App上都能看到这个效果,如美团,爱奇艺电影票等。
    • Swipe-Deck - 仿 Tinder 的可以左右滑动消除卡片效果的自定义控件。
    • IntlPhoneInput - 一个支持国际化的电话号码输入的自定义控件。
    • AndroidUI4Web - AndroidUI4Web是一个高性能的WebApp框架, 在移动浏览器上有与原生App一致的体验。
    • SmoothCheckBox - SmoothCheckBox带有切换动画的CheckBox。
    • AndroidTimelineViewx - AndroidTimelineViewx仿微信朋友圈 时间轴。
    • CityPicker - CityPicker仿美团等选择城市列表。
    • material-intro - Material Design 风格的引导页。
    • EmphasisTextView - 支持部分文字高亮的 TextView。
    • greedo-layout-for-android - 深度定制的 LayoutManager,在显示网格布局的时候会考虑屏幕宽高比。
    • Rosie - 可以让你创建遵循 Clean Architecture 的应用的框架。
    • CreditCardView - 一个交互很赞的信用卡自定义 View。
    • android-md-core - Material风格bootstrap的框架。
    • SwipeCardView - 一个带渐变层叠动画的左右滑动效果(类似于探探左右刷脸)。
    • SwipeSelector - 可以左右滑动切换 item 的 Selector。
    • ForegroundViews - 类似于 FrameLayout 的支持的前景自定义 View。
    • android-material-chips - Material Design 的 Chips 控件实现。
    • XhsEmoticonsKeyboard - 表情键盘解决方案。
    • JKeyboardPanelSwitch - 一套 Android 键盘面板冲突, 布局闪动的处理方案。
    • GestureLibray - 九宫格解锁。
    • RecyclerItemDecoration - RecyclerView相关的ItemDecorstion仍然保持高度定制性,易用性。
    • materiallogindemo - 一个炫酷的Material Design 风格的登录和注册页面 。教程
    • ScrollablePanel - 一个二维可拖动的面板控件,交互像一个二维的RecyclerView,用法也非常简单和RecyclerView的用法基本一样,横向竖向滑动也都实现了View的复用。 如果你想做房态、计划表、待办事项、课程表等需要一个二维的面板的话,这个控件应该是比较适合的。

    动画

    • Android应用开发之所有动画使用详解 - Android应用开发之所有动画使用详解。
    • 动画特效大全 - Android 动画特效大全。
    • SwitchLayout - 国内开发者, Android的Activity切换动画特效库SwitchLayout,视图切换动画库,媲美IOS。
    • ActivityOptionsICS - 一个低版本activity动画兼容库——ActivityOptionsICS,可以很好的实现MD的动画效果。
    • SwipeBack - 一个可以通过手势返回到上一个Activity的开源库,支持上下左右四个方向返回,支持多个View为Child。
    • SpringIndicator - 模仿Morning Routine的引导页效果SpringIndicator;基于模仿红点拖拽的Demo实现:BezierDemo;sample中使用到 快速创建ViewPager和ListView等的第三方库:MultipleModel
    • XhsWelcomeAnim - 国内开发者, 华丽酷炫欢迎引导界面 动画没有之一。
    • Material-Animations - Material风格动画,可以定义两个Activity之间的动画。
    • android-shapeLoadingView - android-shapeLoadingView实现高仿新版58 加载动画,loading。
    • 一个绚丽的loading - 一个绚丽的loading动效分析与实现。
    • TransitionPlayer - 一个 Transition 动画控制控制库,可以让你很轻松的创建一个可交互的动画。
    • loading-balls - loading-balls 一款支持高度配置的 Android 加载进度球。
    • SogoLoading - 仿搜狗浏览器加载动画,实现说明
    • ExplosionField - Android中View 炸裂特效的实现分析
    • AZExplosion - AZExplosion:模仿ExplosionField的粒子破碎效果。
    • BrokenView -玻璃碎裂动画效果。
    • SwipeCardView - SwipeCardView一个带渐变层叠动画的左右滑动效果(类似于探探左右刷脸)。类似SwipeCard
    • CRAudioVisualizationView - 水波纹效果的声音可视化自定义 View。
    • LoadingDrawable - 一些酷炫的加载动画, 可以与任何View配合使用,作为加载动画或者Progressbar, 此外很适合与RecyclerRefreshLayout 配合使用作为刷新的loading 动画。
    • Depth-LIB-Android- - 一款酷炫的 Android 界面过渡动画效果。
    • SwipeCaptcha - 自定义View,仿一个斗鱼web端滑动验证码。 博文

    网络相关

    网络连接
    • ion - 一个异步网络请求和图片加载的库,一个库能搞定几乎所有的网络请求。
    • 多线程下载 - Android 实现多线程下载 完美代码。
    • opandroid - android p2p的开源实现。
    • okio - square出的Okio这个库,尤其擅长处理二进制数据。如果觉得Java的输入输出流实在太复杂啰嗦,不妨试试Okio。
    • okhttp - square出的okhttp库。
    • OkHttpPlus - OkHttp 的一个工具类开源项目OkHttpPlus——支持GET、POST、UI线程回调、JSON格式解析、链式调用、文件上传下载 ,OkHttpPlus介绍
    • Android-Download-Manager-Pro - 一个下载管理库,如果你的 App 有大量的下载工作,这个库能帮到你。
    • FileDownloader - 文件下载引擎,稳定、高效、简单易用。
    • jchat-android - 一个聊天 App,具有完备的即时通讯功能,JChat 的功能基于极光 JMessage SDK 来开发。

    网络测试
    • augmented-traffic-control - Facebook宣布开源移动网络测试工具ATC,该工具支持利用Wi-Fi网络模拟2G、2.5G、3G以及LTE 4G移动网络环境,让测试工程师们能够快速对智能手机和App在不同国家地区和应用环境下的性能表现进行测试。

    图像获取

    响应式编程

    地图

    • 百度地图 - Android百度地图 线路规划,模拟运动轨迹,及全景效果。
    • AirMapView - 支持多个本地地图提供者包括谷歌地图V2和亚马逊地图V2。如果设备没有任何受支持的本地地图提供者,AirMapView会回退到基于web的地图提供者(目前谷歌地图)。

    数据库

    • ORMLite - ORMLite做的最棒但是学习成本有点儿高,ORMLite的文档有点儿烂。
    • SugarORM - SugarORM比较轻便, 支持Has a 和 Has many映射,但无法保存集合,没有映射关系。
    • GreenDAO - GreenDAO要先建立一个java项目来生成对应的表,一变动又要生成,很不方便。
    • ActiveDriod - ActiveDriod也不错 官网
    • ORMDroid - ormdroid 。
    • sqlbrite - 良心企业Square的又一开源项目,当你不想给用ContentProvider,只想简单监听SQLite表增删改的数据变更时可以试试它。
    • sqlbrite - DBExecutor android ORM数据库 1.使用了读写锁,支持多线程操作数据。 2.支持操作多个数据库 3.支持事务 4.缓存Sql,缓存表结构。
    • Iron - 一个快速和易用的 NoSQL 数据存储框架。
    • hawk - 一个快速和易用的键值对数据存储框架,支持AES加密,支持SharedPreferences或Sqlite存储,支持Gson解析。
    • AndroidKeyValueStore - 一个基于 SQLite 的 Key/Value 存储框架。
    • DBFlow - 一个速度极快,功能强大,而且非常简单的 Android 数据库 ORM 库,为你编写数据库代码,DBFlow 已被证明是最好的解决方案。5 个顶级 Android 开源库

    图像浏览及处理

    • MPAndroidChart - MPAndroidChart是一个功能强大的图表开源类库:曲线图、柱形图、环形图。
    • XCL-Charts - (国人开发)基于Android Canvas来绘制各种图表,使用简便,定制灵活。
    • WilliamChart - 绘制图表的库,支持LineChartView、BarChartView和StackBarChartView三中图表类型,并且支持 Android 2.2及以上的系统。
    • CropImageView - 原生ImageView只支持centerCrop,这里有支持9个方向裁剪的ImageView。
    • SimpleCropView - 一个Android的图片裁剪库,使用简单,易于定制。
    • DrawableView - DrawableView实现画板功能,可以改变画笔粗细,颜色,支持撤销功能。
    • ImageCoverFlow - ImageCoverFlow效果不错的画廊控件 可以设置画廊一次可见图片的张数,和其他第三方Gallery控件不同的是,该控件直接继承自View,而不是sdk中的Gallery控件。
    • FancyCoverFlow - 支持Item切换动画效果的类似Gallery View。改进版本可以无限轮播,可以选择自动轮播或者 手动滑动。
    • BGABanner-Android - demo中演示了引导页、以及通过fresco、android-async-http、gson实现广告条的自动轮播效果(splash 、 ViewPager切换动画) 。
    • RecyclerViewPager - 重写后的 RecyclerViewPager 完全继承自RecyclerView,可以自定义触发翻页的距离,可自定义翻页速度,支持VerticalViewPager,支持Fragment。
    • StickerCamera - 可以说是一个完整的相机、图片编辑的 APP,集成了大部分市面上有的同类 APP 的功能,裁剪、滤镜、贴纸应有尽有。
    • demo6_PhotoRiver - 图片流动显示的demo,可以点击流动中的图片放大显示,双击空白处图片以九宫格排列。
    • glide-transformations - 一个基于Glide的transformation库,拥有裁剪,着色,模糊,滤镜等多种转换效果。
    • ColoringLoading - 一个用纯代码实现自动绘画效果动画的项目。
    • SmartDrawing - 一个轻量级的手绘板,加入了一点截图功能。这只是一个Demo。并不能作为类库,也不是完整的项目工程,仅供学习或参考使用。
    • SlidingCard - 漂亮的卡片滑动翻页特效。
    • LargeImage - 加载大图 可以高清显示10000*10000像素的图片。
    • GalleryFinal - 自定义相册,实现了拍照、图片选择(单选/多选)、 裁剪(单/多裁剪)、旋转、ImageLoader无绑定任由开发者选 择、功能可配置、主题样式可配置。GalleryFinal为你定制相册。
    • AndroidAlbum - AndroidAlbum图片选择器:1、MVP结构设计;2、工厂模式对载图框架进行封装抽象,方便替换其他载图框架;3、闪退日志的搜集,方便揪BUG。
    • uCrop - uCrop 是 Yalantis 推出的又一款力作, 用于裁剪 Android 系统上的图片, 致力于打造最佳的图片裁剪体验。
    • crop-image-layout - crop-image-layout:图片裁切布局。
    • RenderscriptHistogramEqualization - RenderScript :简单而快速的图像处理

    视频音频处理

    • ijkplayer - B站开源的视频播放器,支持Android和iOS。
    • DanmakuFlameMaster - 这里是Android上最好的开源弹幕引擎·烈焰弹幕使。
    • YouTubePlayerActivity - 一个可以播放YouTube视频的Activity,支持屏幕旋转、声音控制、播放失败处理、可以自定义Activity关闭动画以及在横屏播放的时候自动隐藏status bar。
    • AndroidVideoPlayer - 开源的 Android 视频播放器,支持 DLNA。
    • Hide-Music-Player - Hide音乐播放器。
    • JamsMusicPlayer - 是一个功能强大的 Android 开源播放器, 作者将原本收费的项目拿出来开源, 实在令人敬佩。
    • RxAndroidAudior - RxAndroidAudior目前最鲁棒的Android声音录制和播放封装库了,说明
    • Timber - 一款遵循了Material Design并且设计精美的播放器 Timber Music Player,已经在google play上架。
    • LandscapeVideoCamera - 一款功能强大的 Android 视频录制库, 仅允许横屏录制, 提供细粒度控制视频的质量与文件大小。

    测试及调试

    • DevelopQuickSetting - 快速开启关闭开发者设置的工具,提供了app界面和桌面widget,能快速打开关闭overdraw,layout border,gpu rendering,adb wifi,不保存activity实例等功能。
    • decompileandroid - 在线反编译apk文件。
    • jadx - 一个Android反编译神器,不同于常见的dex2jar,这个反编译器生成代码的try/catch次数更少,View也不再是数字id了,可读性更高。
    • Androguard - Androguard使用Python写的一系列逆向工具集,功能很强大哦,对逆向工程感兴趣的小伙伴可以这个系列,教程
    • logger - 一个简单、漂亮、功能强大的Android日志程序。
    • stf - WEB 端批量移动设备管理控制工具 STF 的环境搭建和运行,使用说明 。
    • DecompileApk - 一键反编译 APK,输出所有反编译后的代码、资源,使用方便。
    • AppCrashTracker - 一个异常追踪器,可以生成一个 JSON 格式的日志并可以上传到服务器。

    动态更新热更新

    消息推送与及时通讯

    客户端
    服务器端

    完整项目

    • SuesNews新闻客户端 - 腾飞新闻,一个符合 Google Material Design 的 Android 校园新闻客户端 ,新闻客户端说明 。
    • 新闻客户端 - Android应用源码比较不错的新闻客户端,本项目启动引导登录注册用户中心列表显示文章分页下拉刷新文章收藏更新反馈等新闻客户端常见的功能都有,项目分层合理,代码质量较高。
    • materialistic - Material Desgin风格的Hacker News客户端。
    • Telegram - Telegram 是一款专注于速度、安全的短信息应用,快速、简单、免费。Telegram 支持群组聊天,最高200人,最高支持分享1GB的视频,其它图片等等更是不在话下。而且所有信息全部支持同步。由于频发的隐私问题,所以 Telegram 也很注重通信安全。
    • SuZhouTong-client-for-android - 苏州通android客户端,非常多的UI效果。
    • ele_demo - 仿【饿了么】订餐软件的一个demo。
    • MD-BiliBili - Material Design 版 BiliBili Android 客户端。
    • AisenWeiBo - Aisen微博是新浪微博的第三方客户端,UI遵循Material Design:遵循Material Design、发布多图、离线下载、私信(触屏版、颜色主题切换、手势返回,4.4、5.0状态栏变色、离线编辑,定时发布多图、gif、长微博预览。FrescoDemo 。
    • 快递查询 - 使用了爱查快递www.ickd.cn的api接口,可以查询申通、EMS、顺风、圆通、中通、韵达、天天、汇通、全锋、德邦、宅急送等11种快递的单号信息,支持手动输入单号和扫描单号(红米测试的时候扫描单号有点问题),可以保存单号查询记录方便下次查询,,另外还包括了网络状态判断、快递自动更新、软件更新等功能,项目完美运行,有很详细的中文注释和逻辑分层。
    • SmartCall - SmartCall Android 企业通讯录。
    • Android-高仿大众点评客户端源码 - Android-高仿大众点评客户端源码。
    • 八个Android项目源码 - 八个Android项目源码,大部分功能相信可以在实战项目中直接使用,供大家下载学习,大部分项目是基于Android Studio开发,IDE为Eclipse的童鞋可通过网上教程自行转换,这里就不多说了。大家可以下载下来学习看看! 百度云盘下载地址
    • minicat - 一个简洁的饭否App,支持Android 4.0以上版本。
    • SimplifyReader - 一款基于Google Material Design设计开发的Android客户端,包括新闻简读,图片浏览,视频爽看 ,音乐轻听以及二维码扫描五个子模块。
    • GithubTrends - 是一个用来看查看 GitHub 热门项目的 Android App, 遵循 Material Design, 支持订阅 50 多种编程语言, 9 种颜色主题切换, 可在上面收藏喜欢的项目。
    • jianshi - jianshi简诗是国人开发的一个用于记录文字信息的 Android 完整应用, 作者仅用了一天便将其开发出来, 并将开发的流程记录成文放到了简书上。
    • BuildingBlocks - 积木: 一个以知乎日报作为数据展现内容;以抽屉菜单作为功能扩展入口;依循 Material Design 作为主导设计 UI 的应用。
    • Douya - 开源的 Material Design 豆瓣客户端。
    • TranslateApp - 一个实现『划词翻译』功能的 Android 开源应用。
    • likequanmintvp - 基于MVP的Retrofit2(okhttp3)+rxjava+dagger2+greendao+glide+rtmp直播。该项目系仿全民TV。

    插件

    • Android Studio 插件和工具 - 5个 推荐几个有用的 Android Studio 插件和工具(ButterKnife、selectorChapek、GsonFormat、ParcelableGenerator、LeakCanary)。
    • 8 个最优秀的 Android Studio 插件 - 8 个最优秀的 Android Studio 插件(H.A.X.M(硬件加速执行管理器)、Genymotion、Android Drawable Importer、Android ButterKnife Zelezny、Android Holo Colors Generator、Robotium Recorder、jimu Mirror、Strings-xml-tools)。
    • smalidea - 一款 IntelliJ IDEA/Android Studio 的 smali 插件~ ,Smalidea 无源码调试 Android 应用
    • gradle-fir-plugin - 一个上传apk到fir的gradle插件,使用说明
    • android-butterknife-zelezny - 一个ButterKnife的Android Studio插件, 该插件可以让你手动生成上述注入代码。
    • GradleDependenciesHelperPlugin - Gradle 依赖自动补全插件。
    • android-selector-intellij-plugin - 可以根据指定颜色生成Selector Drawable的插件。
    • 7个最佳的Android模拟器 - 7个最佳的Android模拟器。
    • gradle-android-javadoc-plugin - 可以生成 java doc 的 Gradle 插件。
    • gradle-android-junit-jacoco-plugin - 可以生成代码单元测试覆盖率报告的 Gradle 插件。
    • gradle-android-apk-size-plugin - 可以将 Apk 大小记录到 CSV 文件的 Gradle 插件。
    • 几款实用的Android Studio 插件 - 几款实用的Android Studio 插件:1、android-butterknife-zelezny;2、Gsonformat:可根据json数据快速生成java实体类;3、Android Postfix Completion;4、AndroidAccessors;5、Lifecycle Sorter:根据Activity或者fragment的生命周期对其生命周期方法位置进行先后排序,快捷键Ctrl + alt + K;6、JsonOnlineViewer;7、CodeGlance;8、findBugs-IDEA:帮你一起找bug的;9、ADB WIFI:使用wifi无线调试你的app,无需root权限。
    • Leisure - 闲暇(Leisure)是一款集”知乎日报”、“果壳科学人”、“新华网新闻”以及“豆瓣图书”于一体的阅读类Android应用。 果壳、知乎和豆瓣在国内拥有大量用户,这些社区的用户每天都产生很多高质量内容。闲暇以其简介的风格将这几大社区 的优质内容整合于一体,使得用户能有效地获取这些内容,大大节省了用户的时间。酷安下载地址.
    • LayoutFormatter插件 - 可自动将乱序的布局文件进行重新属性排序并格式化,比如 style 和 android:id 必须排在前面,紧接着 layout、padding,而值设定如 text 只能排在最后。

    出名框架

    • xUtils - xUtils 包含了很多实用的android工具。支持大文件上传,更全面的http请求协议支持(10种谓词),拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响。最低兼容android 2.2 (api level 8)。目前xUtils主要有四大模块:DbUtils模块、ViewUtils模块、HttpUtils模块、BitmapUtils模块。
    • afinal - Afinal是一个android的ioc,orm框架,内置了四大模块功能:FinalAcitivity,FinalBitmap,FinalDb,FinalHttp。
    • ButterKnife - ButterKnife是一个专注于Android系统的View注入框架,让你从此从这些烦人臃肿的代码中解脱出来,ButterKnife–View注入框架5 个顶级 Android 开源库
    • EventBus - EventBus是一款针对Android优化的发布/订阅事件总线。主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间传递消息.优点是开销小,代码更优雅。以及将发送者和接收者解耦。xBus - xBus - 简洁的EventBus实现。
    • Small - 做最轻巧的跨平台插件化框架,目前已支持Android、iOS以及html5插件。并且三者之间可以通过同一套javascript接口进行通信。
    • LayoutCast - LayoutCast可以在应用不重启的情况下,将res文件夹下的改动直接同步到手机上。使用LayoutCast,可以节约Android开发者的大量编译等待时间,非常适合真机调试界面的时候使用,推荐每一位开发者安装该利器。BUCK很快,但入侵性强,项目改动大,LayoutCast对项目改动小。
    • retrofit - retrofit将 REST API 转换为 Java 接口。5 个顶级 Android 开源库
    • Dagger2 - Dagger 2 是著名的依赖注入库 Dagger 的继承者,我们强烈推荐它。文档5 个顶级 Android 开源库

    其他

    • java-zhconverter - java-zhconverter是一个简繁体中文互换的Java开源类库。
    • joda-time-android - 一个超赞的时间处理的库,Joda-Time ! 他能帮你轻松处理时区,处理时间加减,计算到期时间等等场景下的问题。java版本
    • AssistiveTouch - 配合Android手机沉浸式隐藏虚拟按键后快捷操作 (Nexus5屏幕变大了)。
    • S-Tools - S-Tools一个可以实时查看的CPU状态和手机各类传感器数据,还有一些例如颜色选择、指南针和设备信息等功能。
    • JsBridge - 模仿微信webview的JsBridge,安全方便的实现js和Java的互相调用,主要通过loadUrl和shouldOverrideUrl实现。
    • Sample Of All Samples - 提供大部分Android5.0组件的示例应用。
    • Android-Package-Channel - 美团网做的把Android多渠道打包工具,打包时间缩短到一分钟,python脚本。
    • fast-apk-packaging - Android不需要重新编译打渠道包。
    • android_gradle_script - gradle批量打包脚本,用txt配置一下,就可以支持多个渠道打包,适合国内这种动不动上百个渠道包的环境。目前有个问题,一次打包脚本超过80个就会GC问题。
    • BatchPackApk - 免签名直接打包工具。
    • Android多渠道打包工具Gradle插件 - Android多渠道打包工具Gradle插件。
    • Gradle-Plugin-User-Guide-Chinese-Verision - Gradle插件使用指南中文版。
    • gradle-guide.books - Android Gradle 插件中文指南(GitBook)。
    • Android-package_tool - 该工程用于编译多渠道Android应用,替换相应的标签,然后重新打包,用perl脚本实现。
    • 兰贝壳儿 - Android多渠道打包解决方案(兰贝壳儿),eclipse插件。
    • Algorithms - 常见算法问题的Java实现。
    • java-design-patterns - 一个常见设计模式的java实现。
    • PreferenceInjector - SharedPreference注入开源库,SharedPreference key与某个变量绑定、监听key变化、初始化key都可以通过注解完成。
    • prettytime - 一个实用的人性化的时间显示,比如:几分钟前,几天前。
    • Material-Movies - Material Design 下的Movie App(电影展示),可供学习,或者直接二次开发。
    • Clean-Contacts - 充满技术含量的一个 Contact App(联系人)。
    • RedEnvelopeAssistant - 完全免费开源的抢红包软件、做这个软件纯粹是发现Android的模拟点击十分好玩,然后顺道写了一个,有此基础,可以再扩展其他的很多模拟点击程序 。
    • superCleanMaster - 一键清理开源版,包括内存加速,缓存清理,自启管理,软件管理等。
    • LoadViewHelper - 切换加载中,加载失败,加载成功布局,定义一个LoadViewHelper所有界面通用。
    • android-best-practices - android最佳实践
    • Android最佳实践 - 安卓最佳实践(1):安卓开发–中文。
    • Android最佳实践 - 从Futurice公司Android开发者中学到的经验。 遵循以下准则,避免重复发明轮子。若您对开发iOS或Windows Phone 有兴趣, 请看iOS Good Practices 和 Windows client Good Practices 这两篇文章。
    • 如何安装ACRA - 如何安装ACRA-一个Android应用Crash跟踪系统—在自己的服务器上。
    • Android ocr识别文字介绍 - Android ocr识别文字介绍 。
    • DaVinci - DaVinci是一个适用于Android Wear平台的图片下载和缓存library。
    • Point-of-Android - Android 一些重要知识点解析整理 。
    • AppStoreLibrary - 检测是否在appstore安装了应用,搜索应用。
    • LeakCanary - 利用此类库,排查内存泄露变得非常简单,LeakCanary 中文使用说明LeakCanary: 让内存泄露无所遁形 。
    • anko - 快速开发框架。
    • CommonAdapter - 通过对于原生Adapter的封装,产生了支持ListView,GridView,RecyclerView的简单通用的Adapter。这种方式将item变成独立的“视图”对象,方便操作,又增加了可扩展性。
    • MVPAndroidBootstrap - 一个Android MVP 模式实例项目。
    • json2notification - 一个多功能方便好用的notification通知栏通知开源库。
    • barcodescanner - 一个封装好的基于zxing二维码扫描库。
    • BGAQRCode-Android - 一个可高度定制二维码扫描界面、生成二维码、识别图片二维码库。
    • mqtt - MQTT 协议 3.1.1 中文翻译版。
    • Droid Plugin - DroidPlugin 是360手机助手在Android系统上实现了一种新的插件机制:它可以在无需安装、修改的情况下运行APK文件,此机制对改进大型APP的架构,实现多团队协作开发具有一定的好处。
    • JsonAnnotation - 利用注解自动生成Gson‘s Model的库。
    • WeChatLuckyMoney - 微信抢红包插件。
    • android-support-23.2-sample - support 库在 23.2 版本新增内容示例项目。
    • Sunoath - 基于MVP+Retrofit+Material Design的Demo。
    • ActivityRouter - 一个url打开activity的Router库,支持指定参数类型,支持参数transfer,支持callback。

    好的文章

    收集android上开源的酷炫的交互动画和视觉效果

    交互篇

    1.SlidingUpPanelLayout 项目介绍:他的库提供了一种简单的方式来添加一个可拖动滑动面板(由谷歌音乐推广,谷歌地图和Rdio)你的Android应用程序。 项目地址:https://github.com/umano/AndroidSlidingUpPanel

    2.FoldableLayout 项目介绍:折叠展开点击的ITEM 项目地址:https://github.com/alexvasilkov/FoldableLayout

    3.android-flip 项目介绍:折叠翻页效果 项目地址:https://github.com/openaphid/android-flip

    4.SwipeBackLayout 项目介绍:拖动关闭当前活动窗体 项目地址:https://github.com/ikew0ng/SwipeBackLayout

    5.AndroidImageSlider 项目介绍:一个漂亮的Slider,可以通过自定义达到更好的效果 项目地址:https://github.com/daimajia/AndroidImageSlider

    6.Android-ParallaxHeaderViewPager 项目介绍:栏目展示动画,自动播放,滚动下方列表时候,收缩效果 项目地址:https://github.com/kmshack/Android-ParallaxHeaderViewPager

    7.FragmentTransactionExtended 项目介绍: 项目地址:https://github.com/DesarrolloAntonio/FragmentTransactionExtended

    8.FragmentTransactionExtended 项目介绍:Android按钮可以化身进度 项目地址:https://github.com/dmytrodanylyk/circular-progress-button

    9.floatlabelededittext 项目介绍:简单的实现浮动标签EditText:Android视图使用EditText之上,并提示EditText时填充文本。 项目地址:https://github.com/wrapp/floatlabelededittext

    10.QuickReturn 项目介绍:Showcases QuickReturn view as a header, footer, and both header and footer. 给几乎所有可以滑动的 View 加上快速返回的 Header 或者 Footer,使用非常方便。 项目地址:https://github.com/lawloretienne/QuickReturn

    11.VNTNumberPickerPreference 项目介绍:这是一个易于使用的自定义偏好,打开一个对话框中有许多选择。的值被自动保存,你可以设置默认,min -和maxValue方便地在XML。 项目地址:https://github.com/vanniktech/VNTNumberPickerPreference

    12.CircularFloatingActionMenu 项目介绍:动画,可定制的圆形浮动菜单为Android, 项目地址:https://github.com/oguzbilgener/CircularFloatingActionMenu

    13.NiftyDialogEffects 项目介绍:Dialog的各种打开动画,Nifty Modal Dialog Effects look like this(Nifty Modal Window Effects) 项目地址:https://github.com/sd6352051/NiftyDialogEffects

    14.material-menu 项目介绍:变形安卓菜单,返回和删除按钮 项目地址:https://github.com/balysv/material-menu

    15.AndroidViewHover 项目介绍:我们需要一个悬停视图,显示菜单,显示消息。 项目地址:https://github.com/daimajia/AndroidViewHover

    16.PagedHeadListView 项目介绍:图片轮转切换 项目地址:https://github.com/JorgeCastilloPrz/PagedHeadListView

    17.android-movies-demo 项目介绍:电影列表3级联动,交互 项目地址:https://github.com/dlew/android-movies-demo

    18.NiftyNotification 项目介绍:提示通知栏的各种动画 项目地址:https://github.com/sd6352051/NiftyNotification

    19.SwipeBack 项目介绍:拖动关闭,模范:kicker app(https://play.google.com/store/apps/details?id=com.netbiscuits.kicker) 项目地址:https://github.com/sockeqwe/SwipeBack

    20.AndroidSwipeLayout 项目介绍:类似微信的测拉菜单 项目地址:https://github.com/daimajia/AndroidSwipeLayout

    21.SnackBar 项目介绍: 项目地址:https://github.com/MrEngineer13/SnackBar

    22.Swipecards 项目介绍:A Tinder-like cards effect as of August 2014. You can swipe left or right to like or dislike the content. The library creates a similar effect to Tinder’s swipable cards with Fling animation. 项目地址:https://github.com/Diolor/Swipecards

    23.LDrawer 项目介绍:Android抽屉与材料设计动画图标 项目地址:https://github.com/keklikhasan/LDrawer

    视觉篇

    1.android-stackblur 项目介绍:毛玻璃,朦胧美 项目地址:https://github.com/kikoso/android-stackblur
    DEMO演示:

    2.BlurEffectForAndroidDesign 项目介绍:实现模糊图形技巧 项目地址:https://github.com/PomepuyN/BlurEffectForAndroidDesign

    3.Shimmer-android 项目介绍:闪动的文字 项目地址:https://github.com/RomainPiel/Shimmer-android

    4.WizardPager 项目介绍:它提供了一个示例实现的Android手机上安装一个向导界面 项目地址:https://github.com/TechFreak/WizardPager

    5.FloatingActionButton 项目介绍:浮动的按钮 项目地址:https://github.com/FaizMalkani/Fabulous

    6.JumpingBeans 项目介绍:跳动的文本 项目地址:https://github.com/frakbot/JumpingBeans

    7.android_maskable_layout 项目介绍:可屏蔽的布局 项目地址:https://github.com/christophesmet/android_maskable_layout

    8.activityanimation 项目介绍:Activit之间切换动画 项目地址:https://github.com/flavienlaurent/activityanimation

    9.android-shape-imageview 项目介绍:提供了一组自定义形状的android imageview组件,和一个框架来定义更多的形状。实现着色器和位图基于掩模图像视图。 项目地址:https://github.com/siyamed/android-shape-imageview

    10.RippleView 项目介绍:认为模仿的连锁反应在单击推出了Android L 项目地址:https://github.com/siriscac/RippleView

    11.android-ui 项目介绍:一个小部件可以定义的行为之间的动态变化 项目地址:https://github.com/markushi/android-ui

    12.FlatUI 项目介绍: 项目地址:https://github.com/eluleci/FlatUI

    UI资源

    • fontawesome - Font-Awesome图标。
    • material-design-responsive-design - 深聊Material Design复杂响应式设计,comprehensive-material-design-note - 帮你全面彻底搞定Material design的学习笔记。
    • Iconics - 这是一个可以让你在你的项目中使用几乎任何字体图标的库。默认包含 FontAwesome 和 Material Design Icons 还包含 Meteocons 插件。你甚至可以添加任何你自定义的字体图标(typeface)。

    开发资源

    他人开源总结
    • awesome-java - java库列表,中文版
    • material design 的android开源代码整理 - material design 的android开源代码整理。
    • Android开源项目分类汇总 - Trinea 国内最多好的开源库总结。 Android 开源库获取途径整理
    • Android开源库源码分析 - Trinea 我们从 Android 开始建了了协作项目,从简介、总体设计、流程图、详细设计全方面分析开源库源码。目前第一期完成,包括10个开源库及5个公共技术点的全面介绍。 在线网页

    • 年薪30万的Android程序员必须知道的帖子 - Android开源项目汇总,带效果gif图。

    • Android官方培训课程中文版 - Google Android官方培训课程中文版。

    • GitHub优秀Android开源项目 - GitHub 优秀的 Android 开源项目,很多中文现成项目。

    • Android开发工具及文档 - androiddevtools,收集整理Android开发所需的Android SDK、开发中用到的工具、Android开发教程、Android设计规范,免费的设计素材等。

    • material_design - eoeAndroid Material Design 中文协同翻译。

    • Android Design Support Library - Android Design Support Library 的 代码实验——几行代码,让你的 APP 变得花俏。
    • Android-Open-Sourse-Library - eoeAndroid 开源组件深度剖析: 1.Http请求组件:Volley\android-async-http\okhttp 2.json数据解析组件:Gson\fast-json\json-smart\Jackson。
    • wiki-eoeandroid - wiki-eoeandroid : Android Develop - 开发技术、Android Design - 设计规范、Android Distribute - 软件发布。

    • Java资源大全 - 国外程序员整理的Java资源大全。

    • Android开发技术前线 - Android开发技术前线 ( android-tech-frontier ),一个定期翻译、发布国内外Android优质的技术、开源库、软件架构设计、测试等文章的开源项目,让我们的技术跟上国际步伐。。

    • 10个常用工具类 - Android快速开发系列 10个常用工具类:1、日志工具类L.java;2、Toast统一管理类;3、SharedPreferences封装类SPUtils;4、单位转换类 DensityUtils;5、SD卡相关辅助类 SDCardUtils;6、屏幕相关辅助类 ScreenUtils;7、App相关辅助类;8、软键盘相关辅助类KeyBoardUtils;9、网络相关辅助类 NetUtils;10、Http相关辅助类 HttpUtils。
    • 19个Android开发工具 - 19个Android 开发工具:1、XAppDbg;2、ChkBugReport;3、APKAnalyser;4、AppXplore;5、Memory Analyzer(MAT);6、Eclipse插件SQLiteManger;7、Robotium;8、ACRA;9、Android Layout Binder;10、Spoon;11、Android Content Provider代码生成器;12、AndroidKickStartR;13、Android Holo颜色生成器;14、ActionBar风格生成器;15、Asset Studio;16、little eye labs;17、Droid Inspector;18、Android Button Maker;19、jsonschema2pojo。

    • apkbus - code4app 与 apkbus整理的Android开源资源分类, Android源代码

    • open-source-android-apps - 他人收集的开源代码:Android Wear、Communication 、Education、Finance、Game、Multi-Media、News & Magazines、Personalization、Productivity、Social Network、Tools、Travel & Local。
    • android-developer-tools-list - Android 常用开发工具 (Android Studio 插件、Android 网站、Android 系统性能调优工具、Android测试工具)。
    • Android平台上最好的几款免费的代码编辑器 - Android平台上最好的几款免费的代码编辑器:Quoda、DroidEdit、AWD、AIDE、CppDroid。
    • androidweekly - android技术开发周报,干货很多。
    • awesome-rails-gem - 收集了很多在平时使用 Rails 开发网站时经常会使用到的 Gem, 当中包括的有用户认证系统, API 接口开发, 文件上传, 站内搜索等优秀的 Gem 源。
    • Android_Data - 一份旨在帮助 Android 初学者快速入门以及找到适合自己学习的资料。
    • Android通用流行框架大全 - Android通用流行框架大全。
    • Android 学习资料收集 - 收集整理这份资料主要帮助初学者学习 Android 开发, 希望能快速帮助到他们快速入门, 找到适合自己学习资料, 节省再去收集学习资料时间。
    中文开发博客列表

    来源: TimLiu-Android


    展开全文
  • android UI 生成器(直接生成布局文件,下载后直接运行就行)
  • Android UI库推荐

    千次阅读 2019-02-20 11:03:51
    1、XUI 它提供了一系列常用的组件和丰富多彩的样式主题,比如最常见的...3、awesome-android-ui 极其丰富和强大的Android组件库,start数33k+。 Github地址: https://github.com/wasabeef/awesome-android-ui
  • Android UI组件实例集合

    热门讨论 2012-09-11 11:31:29
    9、AndroidUI工具包 android-ui-utils 是一个工具包用来帮助设计和开发 Android 用户界面,包含三个单独的工具:Android Asset Studio用户界面原型模具,Android 设计预览,时常需要重复确认程序版面设计状况的 ...
  • android UI大全

    热门讨论 2011-07-01 21:57:00
    android UI 源码 android入门样例 android面试热身 本人花了些时间准备的,献给爱android的粉丝们!
  • Android UI基础教程pdf

    热门讨论 2013-11-01 00:50:32
    Android UI基础教程pdf
  • Android8.1 SystemUI源码

    2018-10-15 16:13:53
    Android8.1 SystemUI源码,已配置好gradle,可以直接导入Android Studio。
  • Android UI设计官方教程(CHM)

    热门讨论 2014-05-25 21:01:30
    用google官方的android UI design 教程制作的,方便离线查阅,页面稍加改动,去掉了页面上原有的导航。
  • androidUI素材

    2013-05-20 11:20:06
    一些常用的android ui素材,简单开发够用了......
  • Android UI界面漂亮的天气预报源码
  • Pro Android Ui

    2014-08-27 13:58:51
    If you’re an Android application developer, chances are you’re using fixed, scrolling, swipe-able, and other cutting-edge custom UI Designs in your Android development projects. These UI Design ...
  • 此版本在“一个不错的UI框架”基础上修改了首次启动底部导航没有选中Tab的情况 Android UI UI框架 底部导航 Fragment
  • Android UI 线程更新UI也会崩溃???

    万次阅读 多人点赞 2020-04-19 22:48:19
    本文已经授权公众号「鸿洋」原创首发。 大家好,我是鸿洋。 上个周末是双休,我决定来...android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy ca...
  • Android UI自适应解决方案 前言 项目地址:AdaptiveAnkoComponent 因为之前一直使用的鸿洋的AndroidAutoLayout(貌似目前停止维护了),所以对这种模式的自适应方案比较认同。但是我是一个JetBrains的粉丝,在...
  • 实用Android UI工具

    千次阅读 2017-12-21 17:19:44
    10款实用Android UI工具 移动应用的UI就好像达摩克利斯之剑,一方面,一个视觉、交互、体验良好的UI可以加强应用在用户心中的形象和识别性,而另一方面,一个体验糟糕的UI设计不仅使用户无法沉浸在应用内,而且还...
  • Android UI框架概览

    千次阅读 2018-03-31 16:51:14
    Android App真实的逻辑构成App UI构成层级结构在Android中绝大部分的UI组件都是存放在android.widget包及其子包、android.view包及其子包,其中所有的UI视图组件都是继承自View类,View类还有一个重要的子类...
  • awesome-android-ui:很棒的Android UIUX库的精选列表

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 369,242
精华内容 147,696
关键字:

androidui