当前位置: 编程技术>移动开发
本页文章导读:
▪EditText横屏时,弹出软件盘时不开展全屏 EditText横屏时,弹出软件盘时不进行全屏
在使用EditText进行文本输入时,若不进行特殊的设置,使用Android自带的软键盘,该软键盘会占用整个界面,那么,如何让键盘只占用屏幕的一部分呢.........
▪ Widget中播音事件(Broadcast)和更新控件 Widget中广播事件(Broadcast)和更新控件
更新控件需要通过RemoteView去更新Widget控件内容例如:RemoteViews rv = new RemoteViews(context.getPackageName(),R.layout.example_widget);
rv.setTextColor(R.id.textView1, Color.parseColor(.........
▪ Java摘引了解 Java引用了解
正常来说,传统的JAVA引用,如
public void doSomeThing(){
User user = new User();
...
}
当方法doSomeThing方法结束时,对象user的引用丢失,其所占的空间将由JVM在下次垃.........
[1]EditText横屏时,弹出软件盘时不开展全屏
来源: 互联网 发布时间: 2014-02-18
EditText横屏时,弹出软件盘时不进行全屏
editText.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
Toast.makeText(MainActivity.this, "text2", Toast.LENGTH_SHORT).show();
return false;
}
});
在使用EditText进行文本输入时,若不进行特殊的设置,使用Android自带的软键盘,该软键盘会占用整个界面,那么,如何让键盘只占用屏幕的一部分呢?
<EditText
android:id="@+id/text1"
android:layout_width="150dip"
android:layout_height="wrap_content"
android:imeOptions="flagNoExtractUi"/>
使用android:imeOptinos可对Android自带的软键盘进行一些界面上的设置:
android:imeOptions="flagNoExtractUi" //使软键盘不全屏显示,只占用一部分屏幕 同时,这个属性还能控件软键盘右下角按键的显示内容,默认情况下为回车键 android:imeOptions="actionNone" //输入框右侧不带任何提示 android:imeOptions="actionGo" //右下角按键内容为'开始' android:imeOptions="actionSearch" //右下角按键为放大镜图片,搜索 android:imeOptions="actionSend" //右下角按键内容为'发送' android:imeOptions="actionNext" //右下角按键内容为'下一步' android:imeOptions="actionDone" //右下角按键内容为'完成'
同时,可能EditText添加相应的监听器,捕捉用户点击了软键盘右下角按钮的监听事件,以便进行处理。
Java代码
[2] Widget中播音事件(Broadcast)和更新控件
来源: 互联网 发布时间: 2014-02-18
Widget中广播事件(Broadcast)和更新控件
更新控件需要通过RemoteView去更新Widget控件内容
例如:
看个广播事件和控件更新的完整例子..
新建一个/res/xml文件夹, 放入一个xml文件example_appwidget.xml
在/res/layout中新建一个xml文件example_appwidget.xml.
新建一个ExampleAppWidgetProvider.java
AndroidManifest.xml
PS: 该例子将展现如何在Widget广播一个事件, 通过按钮触发事件进行广播, 通过onReceiver进行接收广播的信息
更新控件需要通过RemoteView去更新Widget控件内容
例如:
RemoteViews rv = new RemoteViews(context.getPackageName(),R.layout.example_widget);
rv.setTextColor(R.id.textView1, Color.parseColor("#404040"));
AppWidgetManager wm = AppWidgetManager.getInstance(context);
ComponentName cn = new ComponentName(context,ExampleAppWidgetProvider.class);
wm.updateAppWidget(cn, rv);看个广播事件和控件更新的完整例子..
新建一个/res/xml文件夹, 放入一个xml文件example_appwidget.xml
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider
xmlns:android="http://schemas.android.com/apk/res/android" android:minWidth="250px" android:minHeight="50px" android:updatePeriodMillis="80000" android:initialLayout="@layout/example_widget">
</appwidget-provider>
在/res/layout中新建一个xml文件example_appwidget.xml.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:background="#000000"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView android:id="@+id/textView1" android:layout_height="wrap_content" android:layout_width="match_parent" android:text="@string/text1"></TextView>
<Button android:id="@+id/button1" android:layout_height="wrap_content" android:layout_width="match_parent" android:text="Button"></Button>
</LinearLayout>
新建一个ExampleAppWidgetProvider.java
package com.cn;
import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
import android.content.Intent;
import android.widget.RemoteViews;
public class ExampleAppWidgetProvider extends AppWidgetProvider {
static String UPDATE_ACTION = "com.cn.ActionInfo";
@Override
public void onDeleted(Context context, int[] appWidgetIds) {
super.onDeleted(context, appWidgetIds);
}
@Override
public void onDisabled(Context context) {
super.onDisabled(context);
}
@Override
public void onEnabled(Context context) {
super.onEnabled(context);
}
@Override
public void onReceive(Context context, Intent intent) {
//接收广播事件, getAction为广播ACTION, 例如这为UPDATE_ACTION
System.out.println("Action:"+intent.getAction());
if(intent.getAction().equals(UPDATE_ACTION)){
RemoteViews rv = new RemoteViews(context.getPackageName(),R.layout.example_widget);
rv.setTextColor(R.id.textView1, Color.parseColor("#404040"));
AppWidgetManager wm = AppWidgetManager.getInstance(context);
ComponentName cn = new ComponentName(context,ExampleAppWidgetProvider.class);
wm.updateAppWidget(cn, rv);
}else{
super.onReceive(context, intent);
}
}
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
System.out.println(appWidgetIds);
Intent i = new Intent();
i.setAction(UPDATE_ACTION);
PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);
RemoteViews rv = new RemoteViews(context.getPackageName(), R.layout.example_widget);
rv.setOnClickPendingIntent(R.id.button1, pi);
appWidgetManager.updateAppWidget(appWidgetIds, rv);
}
}
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.cn"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="10" />
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".Appwidget3Activity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name="ExampleAppWidgetProvider">
<!-- 自己需要广播的事件 -->
<intent-filter>
<action android:name="com.cn.ActionInfo"></action>
</intent-filter>
<!-- 该广播事件是发布到Widget, 通知更新插件 -->
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE"></action>
</intent-filter>
<meta-data android:name="android.appwidget.provider" android:resource="@xml/example_appwidget"></meta-data>
</receiver>
</application>
</manifest>PS: 该例子将展现如何在Widget广播一个事件, 通过按钮触发事件进行广播, 通过onReceiver进行接收广播的信息
[3] Java摘引了解
来源: 互联网 发布时间: 2014-02-18
Java引用了解
正常来说,传统的JAVA引用,如
当方法doSomeThing方法结束时,对象user的引用丢失,其所占的空间将由JVM在下次垃圾回收时收回.如果我们将user对象的引用保存在一个全局的HashMap中,如
此时,user对象由于在map中保存了引用,只要这个引用存在,那么JVM永远也不会收回user对象所占用的内存.
这样的内存管理机制相信大家都耳熟能详了,在绝大多数情况下,这种都是非常完美的.但在某些情况下,却有些不便.好比如对于缓存而言,当user对象使用之后,我们希望保留其引用以供下次需要的时候可以重复使用,但又不希望其引用一直存在,如果那样,随着时间的推移,有限的空间将会被这些数据消耗殆尽.最好的方式莫过于一种方式,可以在对象没有被垃圾回收器回收之前依然可以访问,当垃圾回收器启动时,如果此对象没有其它对象引用,则按常规对其进行回收.
SoftReference,WeakReference与PhantomReference为上面的思路提供了有力支持.
这三种类型的引用属于"非持续性引用",也就是说,这种引用关系并非持续存在,它们所代表的引用的生命周期与JVM的运行密切相关,而并非传统意义上的引用一样依赖于编码阶段的预先规划.
SoftReference的例子:
假设我们先执行了doSomeThing方法,产生了一个User对象,并为其创建了一个SoftReference引用.之后的某个时刻,我们调用了doAnotherThing方法,并通过SoftReference获取User对象的引用.此时我们是否还能取得user对象的引用?这要看JVM的运行情况.对于SoftReference而言,只有当目前内存不足的情况下,JVM在垃圾回收时才会收回其包含的引用(JVM并不是只有在内存不足的情况下才会启动垃圾回收器,具体什么时候启动得看具体版本JVM的垃圾回收策略).这里可能出现两种情况:
JVM目前还未出现过因内存不足所引起的垃圾回收,user对象的引用可以通过SoftReference从JVM Heap中收回.
JVM已经因为内存不足启动了垃圾回收机制,SoftReference所包含的user对象的引用被JVM所废弃.此时ref.get方法将返回一个空引用(null),对于上面的代码而言,也就意味着这里可能抛出一个NullPointerException.
WeakReference比SoftReference在引用的维持性上来看更加微弱.无需等到内存不足的情况,只要JVM启动了垃圾回收机制,那么WeakReference所对应的对象就将被JVM回收.也就是说,相对SoftReference而言,WeakReference被JVM回收的概率更大.
PhantomReference 比WeakReference 的引用维持性更弱.与WeakReference 和SoftReference不同,PhantomReference所引用的对象几乎无法被回收重用.它指向的对象实际上已经被JVM销毁(finalize方法已经被执行),只是暂时还没被垃圾回收器收回而已.PhantomReference主要用于辅助对象的销毁过程,在实际应用层研发中,几乎不会涉及.
正常来说,传统的JAVA引用,如
public void doSomeThing(){
User user = new User();
...
}
当方法doSomeThing方法结束时,对象user的引用丢失,其所占的空间将由JVM在下次垃圾回收时收回.如果我们将user对象的引用保存在一个全局的HashMap中,如
Map map = new HashMap();
public void doSomeThing(){
User user = new User();
map.put("user",user);
}此时,user对象由于在map中保存了引用,只要这个引用存在,那么JVM永远也不会收回user对象所占用的内存.
这样的内存管理机制相信大家都耳熟能详了,在绝大多数情况下,这种都是非常完美的.但在某些情况下,却有些不便.好比如对于缓存而言,当user对象使用之后,我们希望保留其引用以供下次需要的时候可以重复使用,但又不希望其引用一直存在,如果那样,随着时间的推移,有限的空间将会被这些数据消耗殆尽.最好的方式莫过于一种方式,可以在对象没有被垃圾回收器回收之前依然可以访问,当垃圾回收器启动时,如果此对象没有其它对象引用,则按常规对其进行回收.
SoftReference,WeakReference与PhantomReference为上面的思路提供了有力支持.
这三种类型的引用属于"非持续性引用",也就是说,这种引用关系并非持续存在,它们所代表的引用的生命周期与JVM的运行密切相关,而并非传统意义上的引用一样依赖于编码阶段的预先规划.
SoftReference的例子:
Java代码
SoftReference ref;
public void doSomeThing(){
User user = new User();
ref = new SoftReference(user);
}
public void doAnotherThing(){
User user = (User)ref.get();//通过SoftReference获得对象引用
System.out.println(user.getName());
}
假设我们先执行了doSomeThing方法,产生了一个User对象,并为其创建了一个SoftReference引用.之后的某个时刻,我们调用了doAnotherThing方法,并通过SoftReference获取User对象的引用.此时我们是否还能取得user对象的引用?这要看JVM的运行情况.对于SoftReference而言,只有当目前内存不足的情况下,JVM在垃圾回收时才会收回其包含的引用(JVM并不是只有在内存不足的情况下才会启动垃圾回收器,具体什么时候启动得看具体版本JVM的垃圾回收策略).这里可能出现两种情况:
JVM目前还未出现过因内存不足所引起的垃圾回收,user对象的引用可以通过SoftReference从JVM Heap中收回.
JVM已经因为内存不足启动了垃圾回收机制,SoftReference所包含的user对象的引用被JVM所废弃.此时ref.get方法将返回一个空引用(null),对于上面的代码而言,也就意味着这里可能抛出一个NullPointerException.
WeakReference比SoftReference在引用的维持性上来看更加微弱.无需等到内存不足的情况,只要JVM启动了垃圾回收机制,那么WeakReference所对应的对象就将被JVM回收.也就是说,相对SoftReference而言,WeakReference被JVM回收的概率更大.
PhantomReference 比WeakReference 的引用维持性更弱.与WeakReference 和SoftReference不同,PhantomReference所引用的对象几乎无法被回收重用.它指向的对象实际上已经被JVM销毁(finalize方法已经被执行),只是暂时还没被垃圾回收器收回而已.PhantomReference主要用于辅助对象的销毁过程,在实际应用层研发中,几乎不会涉及.
最新技术文章: