• android第一天


    1.将sdk复制到android-sdk-windows\platforms下.如果有网络的话就android-sdk-windows可以自动下,如果已经手动单独把sdk下好了,那么要手动复制到android-sdk-windows下.(由于住的地方没网,东西是在公司下了拷回去的,也没说明,整了一下午才捣鼓出来,手动复制...)
    2.安装Eclipse插件ADT.
    3.新建android项目.
    4.建立配置ADT(ctrl+F11调屏幕方向)

    Activity就相当于一个页面,所以我们每个类都要去继承它.
    在onCreate中可以创建组件视图.
    创建完毕后要setContentView(组件视图);让它显示在屏幕中.

    如果有多个组件的话,就可以使用XML来创建组件视图以及布局.
    我们创建的组件视图都是在布局中的.
    默认布局是LinearLayout.
    创建视图的id表示 例:@+id/btnOk
    如果在XML中要引用已建立的组件视图id那么就直接用如@id/btnOk表示.

    如果是字符串那么就使用@string/strings来表示.
    其中的strings是在string.xml中定义的.
    例:
    <string name="strings">TestHello</string>
    这个strings就表示TestHello.
    表示颜色等都是这样
    例颜色:<string name="red">#ff0000</string>

    如果显示图像的话就使用@drawable/icon1
    例:<ImageButton android:src="@drawable/icon1" .../>

    在xml中创建的组件在Java中调用例:
     Button btn=(Button) findViewById(R.id.btn);
    每当我们改动XML的时候系统就会自动重新生成R.Java

    事件一定要在setContentView(R.layout.main)之后写,要不然会报错.
    创建完才能find到组件视图.
    添加事件:
    btn.setOnClickListener(new OnClickListener() {
        public void onClick(View arg0) {...}
    }
    参数arg0是所触发事件的视图.

    AndroidManifest.xml相当于全局配置文件.
    如果要改程序的显示图标,那么就改
    <application android:icon="@drawable/icon1" .../>

    布局:
    LinearLayout:按照水平或垂直进行排列.android:orientation="vertical"(或horizontal)
    FrameLayout:左上区,如果添加多个子元素,那么重叠显示在一个元素上.
    RelativeLayout:关系布局,添加的时候指定与某个元素的位置;比如之上\之右;出于性能考虑该布局的精确位置只会计算一次.
    TableLayout:表格式布局.没什么好说的...
    TableRow标签标示布局里面的一行.

    布局可以在XML中创建,一般为根元素.
    也可以在类中创建;例:
    LinearLayout layoutMain=new LinearLayout(this);//创建布局
    layoutMain.setOrientition(LinearLayout.HORIZONTAL);//设置为竖直方向
    setContentView(layoutMain);//将我们建立的布局与activity关联.

    //LayoutInflater对象可以解析XML中的布局.
    LayoutInflater inflate=(LayoutInflater)getSystemService(Content.LAYOUT_INFLATER_SERVICE);
    RelativeLayout layoutLeft=inflate.inflate(R.layout.left,null);//解析并生成一个RelativeLayout布局.
    RelativeLayout.LayoutParams relParam=
       new RelativeLayout.LayoutParams(
         RelativeLayout.LayoutParams.WARP_CONTENT,
          RelativeLayout.LayoutParams.WARP_CONTENT );
    生成relationlayout的布局参数.
    layoutMain.addView(layoutLeft,100,100);//加入布局视图,高度,宽度
    layoutMain.addView(layoutRight,relParam);//加入布局视图,布局参数

    参数值:
    FILL_PARENT:和父容器一样大.
    WARP_CONTENT:和内容一样大.

    Activity跳转:
    在相应事件中:
    Intent intent=new Intent();
    intent.setClass(TestHello.this, Hello.class);//从第一个参数的页面跳转到第二个参数的页面.
    startActivity(intent);//启动这个跳转
    在AndroidManifest.xml中的<application>内加入<activity android:name="类"></activity>

    结束当前activity,方法为:finish();

    activity间跳转传值:
    intent.putExtra("key",value);
    startActivityForResult(intent,REQUEST_CODE);
    //startActivityForResult()这个方法启动Intent,并且当新的activity运行结束的时候,还必须执行原Activity的回调函数onActivityResult().
    //startActivity()这个方法在新的activity执行完后不会执行回调函数,也不用返回任何值.

    接传来的值:
    Bundle extras=getIntent().getExtras();
    String key=extras.getString("key");

    Bundle类型是一个类型安全的容器,它的实现是HashMap.它只能存放基本类型或基本类型的数组(有String);

    setResult(RESULT_OK,intent);
    setResult()方法第一个参数是返回结果码,第二个参数是返回调用此activity的intent.
    onActivityResult(int requestCode,int resultCode,Intent data);
    第一个参数原始Intent中requestCode,
    第二个参数暗示了在心的activity中操作是否合法正确.如果一切是正确的,那么就返回0,如果返回值不是0,那就说明程序运行出现了问题.android提供了一些标准的值,但也可以自己设置.
    第三个参数要返回的Intent

    数据库:
    SharedPreferences:存储方式非常方便,但只适合存储比较简单的数据.
    文件存储:以文件的方式存放/读取
    SQLite:
    内容提供器(Content provider):可多程序共享

    SharedPreferences:
    SharedPreferences sp=getSharedPreferences("story", 0);
    String txt=sp.getString("txt", "");//取数据,default值
    sp.edit().putString("txt",edt.getText().toString()).commit();//存数据,最后提交.
    data/data/包/shared_prefs

    文件存储:
    String FILE_NAME="story.tmp";
    FileOutputStream fos=openFileOutput(FILE_NAME,Context.MODE_PRIVATE);//获得流
    FileInputStream fis=openFileInput(FILE_NAME);

    如果文件不存在,则自动创建,如果存在,则覆盖.
    如果不想覆盖则使用Context.MODE_APPEND
    默认情况下该文件只能被调用的应用程序使用,其他应用程序无法读取这个文件.
    除了openFile的方法外,还有deleteFile,fileList等方法来操作文件.


    如果要用额外资源则放在/res/raw/下,然后使用getResources获取资源.
    Resources myRes=getResources();
    InputStream myFile=myRes.openRawResources(R.raw.myFile);

    SQLite:当调用SQLiteOpenHelper类中的getWritableDatabase()或者getReadableDatabase()方法的时候,如果没有数据,那么android系统就会自动生成一个数据库.SQLiteOpenHelper是一个抽象类,我们通常要继承它,并实现onCreate,onUpgrade,onOpen方法.
    onCreate数据库第一次生成的时候会调用这个方法,一般我们在这个方法里生成数据库表.
    onUpgrade当数据库需要升级的饿时候,android系统会主动的调用这个方法,一般我们在这个方法里面删除数据表,并建立新的数据表.
    onOpen当打开数据库时的回调函数.

    执行sql则调用db.execSQL(sql);db是SQLiteDatabase类型,它是参数.

    Log.i()会将参数内容打印到日志中,并且打印级别是info级别,在使用LogCat工具可以查看.


    SQLiteDatabase db=mOpenHelper.getReadableDatabase();
    String col[]={"col1","col2"};
    Cursor cur=db.query(tableName,col,null,null,null,null,null);
    Integer num=cur.getCount();//获取记录条数.
    db.query的参数:
    第一个参数:表名
    第二个参数:要返回的列
    第三个参数:selection,相当于sql语句的where部分.如果想返回所有数据,那么就null;
    第四个参数:selectionArgs,在selection部分,有可能用"?",那么selectionArgs定义的地祖传会代替?
    第五个参数:group by
    第六个参数:having
    第七个参数:order by

    db.delete的参数:
    第一个参数:数据库表名
    第二个参数:相当于sql语句的where部分
    第三个参数:是第二个参数中参数的参数(代替第二个参数中?的部分)

    ContentValue类和Hashtable类似,但值都是基本类型.

  • 相关阅读:
    HPU 1007: 严格递增连续子段(贪心)
    Codeforces Round #224 (Div. 2) A. Ksenia and Pan Scales
    Codeforces Round #224 (Div. 2) A. Ksenia and Pan Scales
    51Nod 1058: N的阶乘的长度(斯特林公式)
    51Nod 1090: 3个数和为0
    CSU 1112: 机器人的指令
    有关刷题时的多组输入问题
    HDU 1060:Leftmost Digit
    《算法导论》— Chapter 6 堆排序
    《算法导论》— Chapter 9 中位数和顺序统计学
  • 原文地址:https://www.cnblogs.com/java_cSharp/p/android.html
Copyright © 2020-2023  润新知