Johnny Shieh

人如果没有梦想,跟咸鱼有什么分别


  • 首页

  • 分类

  • 归档

  • 标签

  • 读书

  • 小伙伴

  • 关于

  • 搜索

Java 反射机制

发表于 2015-01-30 | 分类于 Java | | 阅读次数

什么是反射?

Java 的反射机制可以使得程序在 Java 运行时能够检测、访问并且修改编译时完全未知的 classes,这个概念很容易和内省混淆。下面是 WiKi 上对这两个概念给出的定义:

反射(Reflection):反射是指计算机程序在运行时可以访问、检测和修改它本身状态或行为的一种能力。
内省(Introspection):内省是指计算机程序在运行检查对象类型的一种能力,通常也可以称作运行时类型检查。

从上面的定义可以看出,相对于内省,反射更进一步。例如,Java 具有反射特性,而 C++ 不具有反射特性只具有内省特性。

反射有什么用途?

反射主要提供以下功能:

  1. 在运行时检查对象的类型

  2. 在运行时新建类的实例

  3. 在运行时检测对象一个类的成员变量和方法

  4. 在运行时调用对象的任意方法

  5. 在运行时修改构造函数、成员变量和方法的访问权限

  6. 等等

阅读全文 »

如何优雅地使用 AndroidStudio

发表于 2015-01-16 | 分类于 Android | | 阅读次数

在 Android Studio 1.0 正式版发布之前,我用的是 IDE 是 Intellij Idea 13(而 Android Studio 就是基于 IDEA 开发的),所以两者在基本使用上没什么大的区别。但是对于之前一直坚守在 Eclipse 阵营的同学们来说,一开始接触 Android Studio 的时候可能会很不习惯,所以在这里,我总结一下自己的优雅的使用方案,希望对大家有所帮助。

使用 Darcula 黑色极客主题

Android Studio 有一个非常具有极客范的主题,一眼看上去非常的高大上,而且长时间写代码也不会觉得刺眼(如果觉得太暗了可以适当调高下亮度)。具体如下:

点菜单栏中 File > Settings ,进入设置页面,在左侧的 IDE Setting 下面选中 Appearance,然后在右侧的 Theme 中选择 Darcula,如下图:

修改默认字体

阅读全文 »

[译] Linux 中 18 个 tar 命令示例

发表于 2015-01-09 | 分类于 Linux | | 阅读次数

Linux 中 “tar” 是 tape archive(磁带归档)的缩写,起初经常被 Linux/Unix 系统管理员用来做磁带驱动器的备份。在 Linux 中 tar 命令用来将一些文件和目录变成高度压缩存档文件,这种文件一般是 tarball、tar、gzip 或者 bzip。人们通常用 tar 命令创建压缩存档文件以便在硬盘和机器之间移动复制。

在这篇文章中我将讲述讨论不同的 tar 命令示例,包括怎么用(tar、tar.gz 和 tar.bz2)压缩算法创建存档文件、怎么解压存档文件、在存档文件中解压出单个文件、查看存档文件的目录、添加文件或目录到存档文件中、在归档文件中删除文件等等。

这篇文章的主要目的是提供各种 tar 命令示例帮助大家理解 tar 存档的方法。

创建tar存档文件

下面命令示例将在当前目录在为 /home/tecmint 目录创建名为 tecmint-14-09-12.tar 的 tar 存档文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# tar cvf tecmint-14-09-12.tar /home/tecmint/
/home/tecmint/
/home/tecmint/cleanfiles.sh
/home/tecmint/openvpn-2.1.4.tar.gz
/home/tecmint/tecmint-14-09-12.tar
/home/tecmint/phpmyadmin-2.11.11.3-1.el5.rf.noarch.rpm
/home/tecmint/rpmforge-release-0.5.2-2.el5.rf.i386.rpm
## If you want create tar file from multiple file
# tar cvf backup.tar johnnyshieh.png ubuntu_config.txt
johnnyshieh.png
ubuntu_config.txt

让我们来讨论下上面用到的几个参数的含义。

c :创建新的 .tar 存档文件

v :详细显示存档 .tar 文件的进度

f :指定存档文件的文件名

阅读全文 »

[译] Android 为 View、ViewGroup 添加前景色

发表于 2014-11-06 | 分类于 Android | | 阅读次数

很多人都知道 Android 的卡片式点击效果,这个 selector 是画在前景上的而不是背景上的,虽然我们一般都是用背景色。这个点击效果实现方式也并不难,下面就给出几种情况下的方法。

下图是 Google Play 应用中按压效果的一个截图:

若为 FrameLayout

添加前景色会非常简单,因为 FrameLayout 本身就有这样一个方法叫 setForeground。实际上,只需要通过在 XML 中android:foreground或代码中动态传一个 selector 作为参数,然后调用 setForeground 就可以了。

若不为 FrameLayout

别担心,这也不会很难。我们只要设置给 selector 设置合适的状态(pressed, focused …),然后设置边界并且在视图画好自己后再画它。这样,selector 就会覆盖在视图之上。

  • Changing the State

在 View 这个类,每次视图改变自己的 drawable state 时都会调用的方法:drawableStateChanged

1
2
3
4
5
6
7
8
9
@Override
protected void drawableStateChanged () {
super.drawableStateChanged();
mForegroundSelector.setState(getDrawableState());
//redraw
invalidate();
}
  • Updating the Drawable Bounds

每次视图改变大小时都会调用的方法:onSizeChanged

1
2
3
4
5
6
@Override
protected void onSizeChanged (int width, int height, int oldwidth, int oldheight) {
super.onSizeChanged(width, height, oldwidth, oldheight);
mForegroundSelector.setBounds(0, 0, width, height);
}
阅读全文 »

Android Edittext 长按没有弹出上下文菜单

发表于 2014-10-11 | 分类于 Android | | 阅读次数

问题分析

Edittext 在 ListView 的 item 中,没有其他的类似焦点冲突问题,在没有头绪的情况下,先从源码开始分析问题根源,Edittext 关于处理长按事件的部分是继承 TextView 的,所以先看 TextView 的 performLongClick 方法

TextView 的 performLongClick 方法源码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public boolean performLongClick() {
boolean handled = false;
if (super.performLongClick()) {
handled = true;
}
if (mEditor != null) {
handled |= mEditor.performLongClick(handled);
}
if (handled) {
performHapticFeedback(HapticFeedbackConstants.LONG_PRESS);
if (mEditor != null) mEditor.mDiscardNextActionUp = true;
}
return handled;
}

可以发现 TextView 的 performLongClick 方法主要分为两步:一、调用 View 的 performLongClick;二、调用 Editor 的 performLongClick

Editor 的 performLongClick 方法源码:

阅读全文 »
1…13141516
Johnny Shieh

Johnny Shieh

我本微末,心向天空

76 日志
13 分类
43 标签
GitHub Weibo Gmail 简书
  • 热门系列
  • Dagger 完全解析(6)
  • AspectJ in Android(3)
  • Kotlin 写 Android 单元测试(4)
  • Kotlin 协程完全解析(5)
© 2015 - 2019 Johnny Shieh
访客数 访问量