Android基础学习-1


本文主要记录Android学习中的几个类,初学基础,学习笔记。

源码: http://77l5jp.com1.z0.glb.clouddn.com/blog%2FAndroid-Learning-Vibrator-Toast-2014-09-14.zip

感觉移动端好玩的东西很多,就去玩玩了。

看过android一阵子了,由于没学过java对android一直比较陌生,刚入门,抄得多写的少。




0x01.android.widget.Toast


Toast是一个显示info信息的小工具,不会获取焦点,所以很多时候显示消息很好用,不会影响用户体验。


Toast 官网给了两个例子,一个简单调用,一个自定义形式:
// Toast 简单调用
Toast.makeText( MainActivity.this, 'some msg', Toast.LENGTH_SHORT).show();


// Toast 自定义模式 
LayoutInflater inflater = getLayoutInflater();
View layout = inflater.inflate(R.layout.toast, (ViewGroup) findViewById(R.id.toast_layout));

TextView text = (TextView) layout.findViewById(R.id.text);
text.setText("This is a custom toast");

Toast toast = new Toast(getApplicationContext());
toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
toast.setDuration(Toast.LENGTH_LONG);    
toast.setView(layout);
toast.show();




经过google, Toast有这么几个函数吧:

toast.setGravity(Gravity.RIGHT | Gravity.TOP, 0, 0);

//设置位置和偏移
Gravity.CENTER 居中
Gravity.LEFT 靠左
Gravity.RIGHT 靠右
Gravity.TOP 靠上
Gravity.BOTTOM 靠下
Gravity.CENTER_HORIZONTAL 横向居中
Gravity.CENTER_VERTICAL 纵向居中
Gravity.FILL 占满
Gravity.FILL_HORIZONTAL 横向占满
Gravity.FILL_VERTICAL 纵向占满
Gravity.NO_GRAVITY 清除所有设置还原默认设置了,貌似就居中了


toast.setDuration(Toast.LENGTH_SHORT);

//设置时间,只能是Toast.LENGTH_LONG和Toast.LENGTH_SHORT两个,长的约4s,短的约2s。


toast.setView(layout);


toast.show();




网上摘抄的一个完全自定义Toast( 源码 ):
protected void myToast(String Title, String Msg){

    //创建一个布局,用于承载Toast中的内容
    LayoutInflater inflater = getLayoutInflater();
    View view = inflater.inflate(R.layout.cell, null);

    //Toast中的内容之一ImageView用于显示图片
    ImageView img = (ImageView) view.findViewById(R.id.ToastImg);
    img.setImageResource( R.drawable.ic_launcher);

    //Toast中的内容之二TextView用于显示Toast的标题
    TextView title = (TextView) view.findViewById(R.id.ToastTitle);
    title.setText( Title );

    //Toast中的内容之三TextView用于显示Toast的信息内容
    TextView text = (TextView) view.findViewById(R.id.ToastMsg);
    text.setText( Msg );

    //创建一个Toast对象
    Toast toast = new Toast(MainActivity.this);

    //设置Toast的显示位置为屏幕的右上方
    toast.setGravity(Gravity.CENTER, 0,0);

    //设置Toast的显示时间
    toast.setDuration(Toast.LENGTH_SHORT);

    //设置Toast显示的布局
    toast.setView(view);

    //显示
    toast.show();

}


经过亲测,可行,就是这个,显示的时间有点长啊。。




0x02.android.os.Vibrator


Vibrator是系统震动的一个类。


官网只提供了4个api.
// Turn the vibrator off.
abstract void    cancel()

// Check whether the hardware has a vibrator.
abstract boolean    hasVibrator()

// Vibrate with a given pattern.
abstract void    vibrate(long[] pattern, int repeat)

//Vibrate constantly for the specified period of time.
abstract void    vibrate(long milliseconds)

关于介绍也很简单了,网上的例子也是清一色的一个版本,手触摸屏幕,震动2s。

等看过android音频处理后,想去试试随音乐节奏震动的效果。




下面是那个网上清一色的例子( 源码 ):


public class MainActivity extends ActionBarActivity {

    Vibrator vibrator;  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main);  
        //获取系统的Vibrator服务  
        vibrator=(Vibrator)getSystemService(Service.VIBRATOR_SERVICE);  
    } 

    protected void onStart( Bundle savedInstanceState ) {  
        //super.(savedInstanceState);  
        Toast.makeText(this, "程序开始运行", Toast.LENGTH_LONG).show();  
    }

    //重写onTouchEvent方法,当用户触碰触摸屏是触发该方法  
    @Override  
    public boolean onTouchEvent(MotionEvent event) {  
        Toast.makeText(this, "触摸屏幕手机震动", Toast.LENGTH_LONG).show();  

        //震动手机两秒  
        vibrator.vibrate(200);  
        return super.onTouchEvent(event);  
    }
}




0x03.文件读写-FileOutputStream

/**
 * @author xiaocao
 * 读取刚才用户保存的内容
 */
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;

private String fileName='save.txt';

private void save() {

    String content = 'xxx';
    try {
        /* 根据用户提供的文件名,以及文件的应用模式,打开一个输出流.文件不存系统会为你创建一个的,
         * 至于为什么这个地方还有FileNotFoundException抛出,我也比较纳闷。在Context中是这样定义的
         *   public abstract FileOutputStream openFileOutput(String name, int mode)
         *   throws FileNotFoundException;
         * openFileOutput(String name, int mode);
         * 第一个参数,代表文件名称,注意这里的文件名称不能包括任何的/或者/这种分隔符,只能是文件名
         *          该文件会被保存在/data/data/应用名称/files/save.txt
         * 第二个参数,代表文件的操作模式
         *             MODE_PRIVATE 私有(只能创建它的应用访问) 重复写入时会文件覆盖
         *             MODE_APPEND  私有   重复写入时会在文件的末尾进行追加,而不是覆盖掉原来的文件
         *             MODE_WORLD_READABLE 公用  可读
         *             MODE_WORLD_WRITEABLE 公用 可读写
         *  */

        FileOutputStream outputStream = openFileOutput(fileName,
                Activity.MODE_PRIVATE);
        outputStream.write(content.getBytes());
        outputStream.flush();
        outputStream.close();
        Toast.makeText(MainActivity.this, "保存成功", Toast.LENGTH_LONG).show();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

}

private void read() {
    try {
        FileInputStream inputStream = this.openFileInput(fileName);
        byte[] bytes = new byte[1024];
        ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream();
        while (inputStream.read(bytes) != -1) {
            arrayOutputStream.write(bytes, 0, bytes.length);
        }
        inputStream.close();
        arrayOutputStream.close();
        String content = new String(arrayOutputStream.toByteArray());
        showTextView.setText(content);

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}


以上是今天的学习笔记!

本文出自 夏日小草, 转载请注明出处: http://homeway.me/2014/09/13/Android-Learning-1/




-By 小草

2014-09-13 19:33:55

Fork me on GitHub