初学Android_方法总结(三)

1、使用ListView控件

ListView控件需要一个布局文件和一个数组资源填充,步骤为:

创建一个布局文件menu.xml,用于ListView的每一行:

   

<TextView 

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

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:gravity="center_horizontal"

        android:textColor="@android:color/background_dark"

        android:shadowColor="@android:color/background_dark"

        android:shadowDx="3"

        android:shadowDy="3"/>


获取ListView:

ListView listView = (ListView)findViewById(R.id.listview);

接下来定义要用来填充ListView控件中各个控件(例如TextView)的字符串:

String[] items = {getResources().getString(R.string.app_name),

                 getResources().getString(R.string.app_name),

                 getResources().getString(R.string.app_name),

                 getResources().getString(R.string.app_name)};

 

使用一个数据适配器(adapter)将数据关联到您创建的布局模版menu.xml,使用哪种适配器取决于使用的数据类型,这里使用的是ArrayAdapter:

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.menu , item);


 

1)       添加自定义分隔条:

在布局文件中的ListView下,将图形资源替换即可:

android:divider="@android:drawable/alert_dark_frame"

2)       ListView选定指示器指出当前选择了哪个列表项,由属性listSelector控制。默认情况下,ListView控件的选定指示器是橙色镶边,要改变它只需要在布局文件中将listSelector属性改为自定义图形资源即可:

android:listSelector="@drawable/btnback"

 

2、其他类型的菜单

上下文菜单(Context menu):用户长时间按住视图对象时弹出的菜单,这种菜单通常与包含类似选项的ListView控件结合使用。当用户长时间按住特定歌曲时,将打开上下文菜单,其中包含注入Play、Delete和Add to Playlist等选项;

选项菜单(Option menus):每当用户单击手机上的Menu按钮时,都将弹出一个选项菜单。这种菜单常用于帮助用户处理应用程序设置等。

1).选项菜单的添加:

  首先使用XML文件在/res/menu菜单下创建一个菜单定义资源mymenu.xml

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

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

<item 

    android:id="@+id/settings_menu_item"

    android:title="@string/app_name"

    android:icon="@android:drawable/ic_menu_preferences"/>   

<item 

    android:id="@+id/help_menu_item"

    android:title="@string/hello_world"

    android:icon="@android:drawable/ic_menu_help"/>

</menu>


  将选项菜单加入到活动中,重写onCreateOptionsMenu()方法:

@Override

public boolean onCreateOptionsMenu(Menu menu) 

{

        getMenuInflater().inflate(R.menu.activity_main, menu);

        return true;

}


  处理用户选择菜单,监视用户打开选项菜单并选择菜单项的操作,重写onOptionsItemSelected()方法:

@Override

public boolean onOptionsItemSelected(MenuItem item)

{

        switch (item.getItemId())

        {

               case R.id.settings_menu_item:

Toast.makeText(getApplicationContext(),"1",Toast.LENGTH_LONG).show();

                      break;

               case R.id.help_menu_item:

Toast.makeText(getApplicationContext(), "2",Toast.LENGTH_LONG).show();

                      break;

        }

        return super.onOptionsItemSelected(item);

}

 


 

3、TabHost的使用

使用TabHost可以在一个屏幕间对不同面板进行切换,步骤如下:

首先建立自己的.xml文件,包含TabHost,TabWidget,FramLayout:

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

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

    android:id="@+id/tabHost"

    android:layout_width="match_parent"

    android:layout_height="match_parent" >

 

    <LinearLayout

        android:layout_width="fill_parent"

        android:layout_height="fill_parent"

        android:orientation="vertical">

        

        <TabWidget 

            android:id="@android:id/tabs"

            android:layout_width="fill_parent"

            android:layout_height="wrap_content">

        </TabWidget>

 

        <FrameLayout 

            android:id="@android:id/tabcontent"

            android:layout_width="fill_parent"

            android:layout_height="fill_parent">

        </FrameLayout>

    </LinearLayout>

</TabHost>


       注意:除了tabhost的id可以自定义以外,其他的必须使用系统的id

       建立几个布局文件作为不同面板相互切换:

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

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

    android:id="@+id/tabHost"

    android:layout_width="match_parent"

    android:layout_height="match_parent" >

 

    <LinearLayout

        android:layout_width="fill_parent"

        android:layout_height="fill_parent"

        android:orientation="vertical">

        

        <TabWidget 

            android:id="@android:id/tabs"

            android:layout_width="fill_parent"

            android:layout_height="wrap_content">

        </TabWidget>

 

        <FrameLayout 

            android:id="@android:id/tabcontent"

            android:layout_width="fill_parent"

            android:layout_height="fill_parent">

        </FrameLayout>

    </LinearLayout>

</TabHost>


获取TabHost并初始化:

              setContentView(R.layout.tabhost);

              TabHost tabHost = (TabHost)findViewById(R.id.tabHost);

注册上面的两个布局文件作为tabhost的内容

(注意:如果直接在<tabhost/>下的<FrameLayout/>中设置内容,则不用这一步)

              LayoutInflater inflater = LayoutInflater.from(getApplicationContext());

              inflater.inflate(R.layout.tab1, tabHost.getTabContentView());

              inflater.inflate(R.layout.tab2, tabHost.getTabContentView());

       构建tabSpec并添加进tabhost中:

              tabHost.addTab(tabHost.newTabSpec("tab1").setIndicator("taba",getResources().getDrawable(android.R.drawable.ic_menu_camera)).setContent(R.id.fl01));       tabHost.addTab(tabHost.newTabSpec("tab2").setIndicator("tabb",getResources().getDrawable(android.R.drawable.ic_menu_help)).setContent(R.id.ll02));

 

4、添加字符串数组资源

要创建字符串数组资源,首先要添加资源文件/res/values/arrays.xml,在该文件中,创建一个名为names<string-array>元素,再在该元素内添加若干<item>元素——每个字符串资源一个。

假定在资源文件strings.xml中穿件了如下字符串资源:

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

<resources>

       <string name="first">我叫第一</string>

       <string name="second">我叫第二</string>

       <string name="third">我叫第三</string>

</resources>


 

在资源文件arrays.xml中,将每个字符串资源作为一项加入到字符串数组names中。例如:

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

<resources>

              <string-array name="names">

                  <item>@string/first</item>

                  <item>@string/second</item>

                  <item>@string/third</item>

              </string-array> 

</resources>


保存资源文件arrays.xml。要加载字符串数组资源names,可以通过编程方式访问它,方法有:

1).通过getResource()获取并赋值给同数据类型的数组

              String[] str = getResources().getStringArray(R.array.names);

2).通过给Spinner设置ArrayAdapter获取

              ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.names, android.R.layout.simple_spinner_item);

              spinner.setAdapter(adapter);

 

5、使用Spinner控件

Spinner控件是一个下拉列表。在关闭状态下,Spinner控件很像下拉列表,但被激活后,它显示一个选择器窗口,而不是在住屏幕上显示一个下拉列表。

    <Spinner

        android:id="@+id/spinner"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:entries="@array/names"/>

其中的android:entries属性用于指定spinner控件要显示的字符串数组资源;也可以以编程方式使用setAdapter将数据绑定在spinner中;setSelection()方法指定默认选择的选项。

 

6、对话框合集:

Dialog:所有对话框的基类,是最简单的对话框,可用于通知用户,一般出现在屏幕的下部;

AlertDialog:包含一个、两个或三个Button控件的对话框,常用于让用户确认或拒绝操作,如删除文件;

CharacterPickerDialog:让用户选择与基本字符串相关联的特殊字符的对话框,这种对话框常用于提供一系列字符供用户选择;

DataPickerDialog:包含DataPicker控件的对话框,用于让用户输入日期;

ProgressDialog:包含Pregress控件的对话框,用于将操作的状态或进度告诉用户,如正在上传或下载数据;

TimePickerDailog:包含TimePicker控件的对话框,用于让用户输入时间;

自定义对话框:使用对话框生成器(dialog builder)自定义对话框布局。

你可能感兴趣的:(初学Android_方法总结(三))