1.textView中的ellipsize
我们都知道当在TextView中设定ellipsize时,显示的结果会是缩略显示,但是比较不好的是
Google默认只会显示倆行,如果自己想多显示的话就必须自定义TextView,为了减少开发
过程中的重复工作,我把最近做的项目中的这部分代码贴出来,如下:
package com.hustunique.Fuubo.View;
import android.content.Context;
import android.util.AttributeSet;
import android.widget.TextView;
public class WeiboContentText extends TextView{
private String mText;
public WeiboContentText(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
public WeiboContentText(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
@Override
public CharSequence getText() {
// TODO Auto-generated method stub
return mText;
}
@Override
public void setText(CharSequence text, BufferType type) {
// TODO Auto-generated method stub
mText = (String) text;
if (mText.length()>22) {
StringBuffer subTextBuffer = new StringBuffer(mText.substring(0, 19));
subTextBuffer.append("...");
text = subTextBuffer;
}
super.setText(text, type);
}
}
比较低级,但是感觉还是比较实用
2.设置输入法弹出后的布局问题可以试下以下系列方法:
getWindow().setSoftInputMode(WindowManager.LayoutParams.xxxx);
3. TextView实现多行本文滚动
<TextView
android:id="@+id/xxx"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:scrollbars="vertical" <!--垂直滚动条 -->
android:singleLine="false" <!--实现多行 -->
android:maxLines="12" <!--最多不超过12行 -->
android:textColor="#ffffff"
/>
当然我们为了让TextView动起来,还需要用到TextView的setMovementMethod方法设置一个滚动实例,代码如下
TextView tv = (TextView)findViewById(R.id.tvCWJ);
tv.setMovementMethod(ScrollingMovementMethod.getInstance());
4.EditText中setInputType的妙用
使用该方法我们可以实现诸如隐藏/显示输入内容,隐藏键盘等等
5.Dalvik与JVM
a. dalvik是基于寄存器,而JVM基于栈,前者可以提前优化,编译时间短,指令简单短小,所需资源少等等
b. dalvik运行的是.dex,而JVM是.class
c. dalvik接合了面向对象和linux的进程/线程机理,在有限的内存中可以有多个实例,每个android应用对应一个实例
并且android中的线程和进程是和linux内核中一一对应的,内核是感知的,但是在JVM中一次只能支持一个进程,并且多线程
是虚拟机虚拟出来的,操作系统只看到单线程
d.dalvik为所有的对象维持一个常量池,而jvm是每个对象有自己的常量池
6. android中实现view的更新有两组方法,一组是invalidate,另一组是postInvalidate,其中前者是在UI线程自身中使用,而后者在非UI线程中使用。
7.GC的一般原因:
过长时间持有占用大内存的对象引用,比如activity和context
bitmap没有recycle
cursor没有关闭
自定义adapter时,没有利用contentview
8.将自己的应用添加到系统分享或是发送到:
在自己的activity中加入以下代码
<intent-filter android:label="自己的label">
<action android:name="android.intent.action.SEND" />
<action android:name="android.intent.action.SEND_MULTIPLE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="application/*" />
<data android:mimeType="audio/*" />
<data android:mimeType="image/*" />
<data android:mimeType="text/*" />
<data android:mimeType="video/*" />
<data android:mimeType="multipart/*" />
</intent-filter>
9.在自己程序中设置桌面壁纸
public void setWallpaper(View view) {
//生成一个设置壁纸的请求
final Intent pickWallpaper = new Intent(Intent.ACTION_SET_WALLPAPER);
Intent chooser = Intent.createChooser(pickWallpaper,"chooser_wallpaper");
//发送设置壁纸的请求
startActivity(chooser);
}
将以上方法作为一个事件触发函数即可
10.将自己程序的背景设置为手机壁纸
在values文件夹下创建一个styles.xml文件,加入如下代码
<resources>
<style name="Theme" parent="android:Theme.Wallpaper">
<!-- windowNoTitle设置为true,去掉标题栏 -->
<item name="android:windowNoTitle">true</item>
</style>
</resources>
然后在自己的程序中使用以上风格即可,注意自己的程序中不能再设置背景,否则不会出现壁纸