android学习第二天(android的核心组件)

Android核心组件的讲解

1<LinearLayout>  一般将其他组件或layout放入这个layout

2ListViewLayout)是一个方格其中放组件,相当于下图中一格一格的样式。

 

ListView中赋予内容用到了适配器模式。

·ListAdapter(接口)

通过这个适配器接口可以向ListView中添加多种数据类型的内容,只需要添加不同类型的ListAdapter的实现类即可。

举例:ListView相当于电脑,适配器ListAdapter相当于电脑的适配器,所有的适配器都实现了ListAdapter中的方法,供ListView调用。

·ArrayAdapter

ListAdapter的实现类之一,适合将字符串数组放入ListView中;

------------------第一种方式:

ListAdapter adapter = new ArrayAdapter<String>

(Main.this, R.layout.main_lv_text, mainOptions);

lv.setAdapter(adapter);

 

/**

* new ArrayAdapter<String>(context, textViewResourceId, objects)

* 参数详解

* context 容器(上下文)架构中第三层提供的接口  任何一个Activity都对应一个Context对象,我在这个Activity中做任何与UI相关的操作的时候都必须提供这个context对象,一般由Main.this来提供(java中没有这样的写法)

* textViewResourceId 这里只是把数组的内容加入到ListView中的一个方格里去,但是数组的内容到了方格里面会采用什么样的布局去排列呢(也就是说ListView是一个layout,真正存放数组内容的还是文本域),这个参数就是表示数组内容到ListView的小方格中的文本域布局layout的ResourceIdlayout下建立main_lv_demo.xml文件,其中定义文本框的布局

* objects  要添加的数组

*/

Res下layout下建立main_lv_text.xml文件,文件内容

<?xml version="1.0" encoding="utf-8"?>

    <TextView xmlns:android="http://schemas.android.com/apk/res/android"

    android:text="TextView" 

    android:id="@+id/textView1" 

    android:layout_width="wrap_content" 

    android:layout_height="wrap_content" 

    android:textSize="30px"

    android:textColor="#ff0000"/>

------------------第二种方式:

也可以使用自带的文本布局方式

ListAdapter adapter = new ArrayAdapter<String>

(context, android.R.layout.simple_list_item_1, mainOptions);

lv.setAdapter(adapter);

/**

* android.R.layout.simple_list_item_1

系统自带的布局方式

这个文字布局就和android系统中的“设置”中的设置项布局相似了

*/

3,为ListView中的组件添加响应事件

lv.setOnItemClickListener(new OnItemClickListener() {

@Override

public void onItemClick(AdapterView<?> parent, View view, int position,long id) {

/**

 * 参数详解(AdapterView<?> arg0, View arg1, int arg2,long arg3) 

 * AdapterView<?> parent       表示上面的ListView(AdapterView是ListView的父类)

 *   被点中的ListView

 * View view  被点中的那个TextView

 * int position  点击第几个(0,1,2......)

 * long id  点击TextView的id为这个id的TextView

 * 

 * 一般前两个参数用的少,第三个参数用的最多

 */

String optionValue = mainOptions[position];    //取出数组中的值

//界面中显示

Toast.makeText(Main.this"你点了"+optionValue, 2000).show();//Toast吐司

/**

 * Toast.makeText(context, text, duration)

 * contextMain.this

 * text     要显示的文本

 * duration文本在界面上停留多少毫秒

 */

//Tosat对象的创建用的是工厂方法

}

});

4resvalues中数组值的获取

上面的程序中ListView中要显示的内容来自之前定义的数组

private String[] mainOptions = {"ABC","BCD","DEF"};

但是如果显示的条目数比较多的话,像这种直接初始化数组的方式就不可取。

解决方法是:利用res下的values

res下的values下建立文件arrays.xml,文件中定义数组内容:

<?xml version="1.0" encoding="utf-8"?>

<resources>

    <string-array name="main_options">

    <item>时间设置</item>

    <item>安全设置</item>

    <item>网络设置</item>

    <item>账户设置</item>

    <item>出场设置</item>

    <item>关于手机</item>

    </string-array>

</resources>

然后再程序中进行初始化:

private String[] mainOptions;

onCreate方法中:

Resources res = getResources();//获取所有的资源对象

mainOptions = res.getStringArray(R.array.main_options);

5,代码及运行结果

代码:Android_Tarena_day02

结果:

 

6,一屏跳到另外一屏

第一步:src下建立Activity00.java继承Activity,重写onCreate方法

第二步:在AndroidManifest.xmlapplication标签下增加activity标签

<activity android:name=".Activity00"

        android:label="@string/a00_name">

</activity>

第三步:在点击事件中加入如下代码:

Intent intent = new Intent(Main.this,Activity00.class);

                                       //Intent意图(用来封装Activity和Activity互相的消息传递)

startActivity(intent);

7Activity00页面显示联系人列表

 

LinearLayout中放置TextViewListView

ListView中放置两个TextViewname+phone

放置内容:

Contact.java

Private String name;

Private String phone;

public Map<String,Object> toMap()

{

Map<String,Object>  map = new HashMap<String,Object>();

map.put("name"name);

map.put("phone"phone);

return map;

}

Activity00.java

List<Map<String,Object>> concatListnew ArrayList<Map<String,Object>>();

concatList.add(new Contact("liu","15330793787").toMap());    Android 中用Map来封装实体

ListAdapter adapter = new SimpleAdapter

(Activity00.thisconcatList,R.layout.a00_lv_text

new String[]{"name","phone"}, 

new int[]{R.id.a00_lv_name,R.id.a00_lv_phone});

/**

 * 参数详解new SimpleAdapter(context, data, resource, from, to)

 * context      Main.this

 * data 数据(List类型)

 * resource     布局(int

 * from放入的字段组成的数组

 * to放入的字段对应layout的id

 */

lv.setAdapter(adapter);

          /*

 * 长按联系人--拨打电话

 */

lv.setOnItemLongClickListener(new OnItemLongClickListener() {

@Override

public boolean onItemLongClick(AdapterView<?> adapterView, View view,

int position, long id) {

String phone = (String)concatList.get(position).get("phone");

// Intent intent = new Intent("Intent.ACTION_CALL", Uri.parse("tel:"+phone));

Intent intent = new Intent("android.intent.action.CALL", Uri.parse("tel:"+phone));

/**

 * 参数详解new Intent(action, uri);

 * action String动作标记

                                          动作意图(打电话)  android.intent.action.CALL

 * uriUri     动作信息Uri.parse("tel:18391818293")

 */

startActivity(intent);

 

/**必要的一步-------申请打电话权限**/

/**

 * AndroidManifest.xml中<manifest>标签下加

 * <uses-permission android:name="android.permission.CALL_PHONE"/>

 * 也可以使用xml文件下的permissions视图Add-uses permissions-name selected

                     CALL_PHONE

 */

return false;

}

});

8ImageViewSD卡中加载图片)

显示图片需要用到ImageView组件:

ImageView iv = (ImageView)findViewById(R.id.a01_image);

public void onClick(View v) {

Bitmap bit = BitmapFactory.decodeFile

                ("/mnt/sdcard/gang.png");

iv.setImageBitmap(bit);

}

·SD卡的路径:

切换到DDMS视图,Drivers处选中模拟的设备,右面的视图切换到File Explorer,这里面的文件就是代表设备中的文件,发现其中在mnt下有个文件夹为sdcard,所以SD路径为/mnt/sdcard

 

·如何往SD卡中添加文件:

如下图,往SD卡中添加文件点击1,从SD导出文件点击2,删除SD中文件,点击3

效果:

   

猜你喜欢

转载自oaksun.iteye.com/blog/1839035