• android备忘录


    1.跑马灯-滚动字幕 多用于广告,在屏幕上方滚动显示,可以是文字,图片等

    #滚动字幕
    TextView 中加(singleLine="true",ellipsize="marquee",
    marqueeRepeatLimit="marquee_forever",focusable="true"
    focusableInTouchMode="true")等属性
    String html="中新网10月11日电,科学家<a href='http://www.google.com'>爱因斯坦</a>睡着了";
    CharSequence charSequence=Html.fromHtml(html);//可以解析HTML
    textView1.setText(charSequence);
    textView1.setMovementMethod(LinkMovementMethod.getInstance());

    2.

    使用剪贴板传递数据:
    ClipboardManager clipboardManager=(ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);
    clipboardManager.setText(someString);//复制到剪贴板
    String clipmsg=clipboardManager.getText().toString();//取出内容
    可以进行复杂数据的传输,如可序列化的对象:
    ByteArrayOutputSream byteArray_os=new ByteArrayOutputStream();
    String base64String="";
    try{
        ObjectOutputStream oos=new ObjectOutputStream(byteArray_os);
        oos.writeObject(myData);
        base64String=Base64.encodeToString(byteArray_os.toByteArray(),Base64.DEFAULT);//android.util.base64
        oos.close();
        }catch

    3.

    使用静态变量在Activity之间传递数据
    MainActivity:    public static String name="jack";
        public static int age=23;
    OtherActivity中可直接访问public的此变量

    4.

    短信接收者,(不创建Activity的话不会在启动器中显示图标)
    public class SmsReceiver extends BroadcastReceiver{
        public void onReceive(Context context,Intent intent){
        //Sysout短信收到了
        Object[] pdus=(Object[])intent.getExtras().get("pdus");//模版代码,getExtras返回类型为Bundle,pdus是电信规定的短信格式
        for(Object pdu:pdus){
        SmsMessage sms=SmsMessage.createFromPdu((byte[])pdu);
        String body=sms.getMessageBody();
        String sender=sms.getOriginatingAddress();
        //syso
        }}}}
    记得加<receiver android:name=".SmsReceiver">...action...
        intent-filter里面可以设置优先级priority,值越大优先级越高,系统短信应用似乎为0,因此可以使用abortBroadcast();来拦截短信通知。
    适用于2.3,,4.1的代码好像名字有了变化,需要自己实验一下

    5.RadioButton单选按钮是分组的即在<RadioGroup标签内的是一组
    监听器有两种,一般将radioGroup绑定在OnCheckedChangeListener,注意导入的包为widget的而非compound的,另一种监听器即OnClickListener

    6.图片比例
    Drawable drawable=getResources().getDrawable(getResourceId(source));
    if(source.equals("image3"))
    drawable.setBounds(0,0,drawable.getIntrinsicWidth()/2,drawable.getIntrinsicHeight()/2);//将图片image3按照50%的比例压缩

    7.页面左右滑动效果,添加<android.support.v4.view.ViewPager,此标签内部再添加<android.support.v4.view.PagerTitleStrip

    8.

    对话框Dialog
    复写OnClickListener中的onClick方法,注意导入的包是什么,和Button的不一样
    AlertDialog.Builder builder=new AlertDialog.Builder(MainActivity.this);
    builder.setTitle("tips");
    builder.setMessage("你确定要。。。?");
    builder.setIcon(R.drawable.x);
    AlertDialog alert=builder.create();
    alert.show();

    9.在Activity之间传递数据的方式如剪切板等,Intent(意图),还有一种比较实用的方式:就是全局对象,除非Android应用程序清除内存,否则全局对象将一直可以访问。import android.app.Application;
    public class MyApp extends Application{
    public void onCreate(){
    super.onCreate();}
    void setName(){...//写一些自定义的函数}}
    在main activity里使用myApp=(MyApp...)getApplication();myApp.setName("jack");//调用自定义的函数进行对全局对象的修改,全局对象可以被任一个activity里直接访问
    注意要在Manifest里application标签中注册,直接加入android:name=".MyApp"

    10.ProgressBar的Style:默认为逆时针旋转的圆圈
    xml里设置<ProgressBar
    style="?android:attr/progressBarStyle此处接风格"
    水平:Horizontal
    以下圆圈:
    小风格:Small 大风格Large
    反向风格:Inverse,指颜色深一些
    还有:Small.Inverse,Large.Inverse,其实看不出明显的区别
    max=长度,200
    progress="当前进度",如100
    secondaryProgress第二进度

    11.实现页面跳转到发短信系统页面:
    在按钮监听器的 onClick方法中写如下代码:
    Uri uri=Uri.parse("smsto://183029249282");
    Intent intent=new Intent(Intent.ACTION_SENDTO,uri);
    intent.putExtra("sms_body","The SMS text");
    startActivity(intent);
    实现跳转到拨号盘:
    /** Create our Intent to call the Dialer */
    /** Pass the Dialer the number 5551212 */
    Intent DialIntent = new
    Intent(Intent.DIAL_ACTION,Uri.parse("tel:5551212"));//貌似是ACTION_CALL
    /** Use NEW_TASK_LAUNCH to launch the Dialer Activity*/
    DialIntent.setLaunchFlags(Intent.NEW_TASK_LAUNCH );
    /** Finally start the Activity */
    startActivity(DialIntent);

    12.

    判断SD卡是否被挂载的两种方式:
    1.简单:File f=new File("/sdcard/");
        f.exists();
    2:写一个监听函数,用来监听
    private final BroadcastReceiver broadcastRec=new BroadcastReceiver(){
        @Override
        public void onReceiver(Context context,Intent intent){
            if(intent.getAction().equals("android.intent.action.MEDIA_MOUNTED")){//SD 卡已经成功挂载
                ...}else if(intent.getAction().equals("android.intent.action.MEDIA_REMOVED")
                        ||
                        intent.getAction().equals("android.intent.action.ACTION_MEDIA_UNMOUNTED")
                        ||
                        intent.getAction().equals("android.intent.action.ACTION_MEDIA_BAD_REMOVAL")) {//各种未挂载状态
                    //无 SD 卡
                }
        }
    };

    13.

    我们知道,listFiles()会列出当前目录下的文件,但是,另一个问题出来了,如果当前目录下文件杂乱无部分,而
    我们又不想列出所有文件,
        怎么办?FileFilter 提供了一个解决方法。
        我们只需要实现 public abstract boolean accept
        (File pathname)接口就可以了。
        FileFilter filter = new FileFilter() {
            public boolean accept (File file) {
                if (file.isFile() && file.getAbsolutePath().toLowerCase().endsWith(".txt")) {
                    return true;
                }
                return false;
            }
        };
    File[] files = file.listFiles(filter);
    
    
    通过指定 URL 的图片,获取图片数据,并转换成 Android 的支持的图片格式,相关代码
    如下:
    // 显示网络上的图片
    public static Bitmap returnBitMap(String url) {
    Log.i("returnBitMap", "url=" + url);
    URL myFileUrl = null;
    Bitmap bitmap = null;
    try {
    myFileUrl = new URL(url);
    } catch (MalformedURLException e) {
    e.printStackTrace();
    }
    try {
    HttpURLConnection conn = (HttpURLConnection) myFileUrl
    .openConnection();
    conn.setDoInput(true);
    conn.connect();
    InputStream is = conn.getInputStream();
    bitmap = BitmapFactory.decodeStream(is);
    is.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    return bitmap;
    }
    
    
    多情况下,需要通过 POST 将本地的数据发送给服务器,如下是一段实际的代码
    public void MyFunction{
    HttpClient httpclient = new DefaultHttpClient();
    //你的 URL
    HttpPost httppost = new HttpPost("http://www.eoeandroid.com/post_datas.php");
    try {
    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
    //Your DATA
    nameValuePairs.add(new BasicNameValuePair("id", "12345"));
    nameValuePairs.add(new BasicNameValuePair("stringdata", "eoeAndroid.com is Cool!"));
    httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
    HttpResponse response;
    response=httpclient.execute(httppost);
    } catch (ClientProtocolException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    
    
    重新启动应用,应用保存了我们输入的 Name 和 Password,现在来看看其实现的代码,在 DBSharedPreferences.java 文件
    中,此文件的代码如下所示:
    package us.imnet.iceskysl.db;
    import Android.app.Activity;
    import Android.content.SharedPreferences;
    import Android.os.Bundle;
    import Android.widget.EditText;
    public class DBSharedPreferences extends Activity {
    public static final String SETTING_INFOS = "SETTING_Infos";
    public static final String NAME = "NAME";
    public static final String PASSWORD = "PASSWORD";
    private EditText field_name; //接收用户名的组件
    private EditText filed_pass; //接收密码的组件
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    //Find VIew
    field_name = (EditText) findViewById(R.id.name); //首先获取用来输入用户名的组件
    filed_pass = (EditText) findViewById(R.id.password); //同时也需要获取输入密码的组件
    // Restore preferences
    SharedPreferences settings = getSharedPreferences(SETTING_INFOS, 0); //获取一个 SharedPreferences 对象
    String name = settings.getString(NAME, ""); //取出保存的 NAME
    String password = settings.getString(PASSWORD, ""); //取出保存的 PASSWORD
    //Set value
    field_name.setText(name); //将取出来的用户名赋给 field_name
    filed_pass.setText(password); //将取出来的密码赋给 filed_pass
    }
    om
    .c
    @Override
    protected void onStop(){
    super.onStop();
    SharedPreferences settings = getSharedPreferences(SETTING_INFOS, 0); //首先获取一个 SharedPreferences 对象
    settings.edit()
    .putString(NAME, field_name.getText().toString())
    .putString(PASSWORD, filed_pass.getText().toString())
    .commit();
    } //将用户名和密码保存进去
    }
    通过上述代码可以看到,在 onCreate 中使用 findViewById 得到两个 EditView 后,使用 getSharedPreferences 取得
    SharedPreferences 对象 settings,然后使用 getString 取得其中保存的值,最后使用 setText 将其值设置为两个 EditText 的
    值。
    而在程序运行onStop过程,也就是在程序退出时,首先使用getSharedPreferences得到settings,然后调用edit()方法使
    其处于可以编辑状态,并使用putString将两个EditText中的值保存起来,最后使用commit()方法提交即可保存。
    小知识:
    SharedPreferences 保存到哪里去了?
    SharedPreferences 是以 XML 的格式以文件的方式自动保存的,在 DDMS 中的 File Explorer 中展开到
    /data/data/<package name>/shared_prefs 下,以上面这个为例,可以看到一个叫做 SETTING_Infos.xml 的文件
    将其导出到设备中,可以打开这个文件,看到其代码内容为:
    <?xml version='1.0' encoding='utf-8' standalone='yes' ?>
    <map>
    <string name="PASSWORD">Password</string>
    <string name="NAME">IceskYsl</string>
    </map>
    小知识:
    我们可以通过「getXXX」函数,从 SharedPreferences 中读取不同类型的内容,例如,上面我们使用[
    getString ]读取 String 类型的内容。
    注意:
    Preferences 只能在同一个包内使用,不能在不同的包之间使用。
    前面介绍的 Shared Preferences 存储方式非常方便,但是其只适合存储比较简单的数据,如果需要存储更多的数
    据,可行选择的方式有好几种,这里先给读者介绍文件存储的方法。
    和传统的 Java 中实现 I/O 的程序类似,在 Android 中,其提供了 openFileInput 和 openFileOuput 方法读取设备
    上的文件,下面看个例子代码,具体如下所示:
    String FILE_NAME = “tempfile.tmp”; //确定要操作文件的文件名
    // Create a new output file stream that’s private to this application.
    FileOutputStream fos = openFileOutput(FILE_NAME, Context.MODE_PRIVATE); //初始化
    // Create a new file input stream.
    FileInputStream fis = openFileInput(FILE_NAME); //创建写入流
    上述代码中两个方法只支持读取该应用目录下的文件,读取非其自身目录下的文件将会抛出异常。需要提醒的是,
    如果调用FileOutputStream 时指定的文件不存在,Android 会自动创建它。另外,在默认情况下,写入的时候会覆盖原
    文件内容,如果想把新写入的内容附加到原文件内容后,则可以指定其mode为Context.MODE_APPEND。
    注意:
    默认情况下,使用 openFileOutput 方法创建的文件只能被其调用的应用使用,其他应用无法读取这个文件,如果需
    要在不同的应用中共享数据,可以使用 Content Provider 实现,关于 Content Provider 我们将在稍后的内容中介绍。
    小知识:
    资源文件放在哪里?
    如果你的应用需要一些额外的资源文件,例如,一些用来测试你写的音乐播放器是否可以正常工作的 MP3 文件,可
    以将这些文件放在应用程序的/res/raw/下,如 mydatafile.mp3。那么就可以在你的应用中使用 getResources 获取资源
    后,以 openRawResource 方法(不带后缀的资源文件名)打开这个文件,实现代码如下所示:
    Resources myResources = getResources();
    InputStream myFile = myResources.openRawResource(R.raw.myfilename);
    除了前面介绍的读写文件外,Android 还提供了诸如 deleteFile、fileList 等方法来操作文件,不再赘述。
    
    
    #点击按钮选择本地联系人(电话簿),button绑定一个onUpdateContact(View view){
        startActivityForResult(new Intent(Intent.ACTION_PICK,ContactsContract.Contacts.CONTENT_URI);PICK_CONTACT_REQUEST);
    //Pass in the Uri for all contacts,private static final int PICK_CONTACT_REQUEST = 0;is defined by you    
        }
    
    protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
        
    if (requestCode == PICK_CONTACT_REQUEST) {
            
        if (resultCode == RESULT_OK) {...}}}
    别忘加android.permission.READ_CONTACTS
  • 相关阅读:
    使用NHibernate绑定页面数据时,出现"未能加载视图状态,正在向其中加载视图状态。。。。"的Bug
    以?替代参数配合扩展方法简化数据库操作的实践
    好代码并非一蹴而就读《代码整洁之道》
    C#中,数据处理层之数据库基类
    C#中,页面层之简易验证模块
    C#中,数据交互层参数替代方案(三)
    读《程序员成长路线图:从入门到优秀》
    unity3d 屏蔽右键选项弹窗
    unity3d与web进行交互
    unity3d 使用背景贴图
  • 原文地址:https://www.cnblogs.com/makefile/p/3561736.html
Copyright © 2020-2023  润新知