当前位置:  编程技术>移动开发
本页文章导读:
    ▪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进行文本输入时,若不进行特殊的设置,使用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代码  
  • 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;   
  •         }   
  •     });  

  •     
    [2] Widget中播音事件(Broadcast)和更新控件
        来源: 互联网  发布时间: 2014-02-18
    Widget中广播事件(Broadcast)和更新控件
    更新控件需要通过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引用,如
    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主要用于辅助对象的销毁过程,在实际应用层研发中,几乎不会涉及.

        
    最新技术文章:
    ▪Android开发之登录验证实例教程
    ▪Android开发之注册登录方法示例
    ▪Android获取手机SIM卡运营商信息的方法
    ▪Android实现将已发送的短信写入短信数据库的...
    ▪Android发送短信功能代码
    ▪Android根据电话号码获得联系人头像实例代码
    ▪Android中GPS定位的用法实例
    ▪Android实现退出时关闭所有Activity的方法
    ▪Android实现文件的分割和组装
    ▪Android录音应用实例教程
    ▪Android双击返回键退出程序的实现方法
    ▪Android实现侦听电池状态显示、电量及充电动...
    ▪Android获取当前已连接的wifi信号强度的方法
    ▪Android实现动态显示或隐藏密码输入框的内容
    ▪根据USER-AGENT判断手机类型并跳转到相应的app...
    ▪Android Touch事件分发过程详解
    ▪Android中实现为TextView添加多个可点击的文本
    ▪Android程序设计之AIDL实例详解
    ▪Android显式启动与隐式启动Activity的区别介绍
    ▪Android按钮单击事件的四种常用写法总结
    ▪Android消息处理机制Looper和Handler详解
    ▪Android实现Back功能代码片段总结
    ▪Android实用的代码片段 常用代码总结
    ▪Android实现弹出键盘的方法
    ▪Android中通过view方式获取当前Activity的屏幕截...
    ▪Android提高之自定义Menu(TabMenu)实现方法
    ▪Android提高之多方向抽屉实现方法
    ▪Android提高之MediaPlayer播放网络音频的实现方法...
    ▪Android提高之MediaPlayer播放网络视频的实现方法...
    ▪Android提高之手游转电视游戏的模拟操控
     


    站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3