码迷,mamicode.com
首页 > 移动开发 > 详细

[转]android学习----基础UI编程(五)

时间:2015-06-11 18:43:16      阅读:251      评论:0      收藏:0      [点我收藏+]

标签:

  • 相框设计 :ImageView 的堆叠作用
  • 相框设计 :ImageButton 的堆叠作用
  • 自定义下拉菜单 :Spinner 与setDropDownViewResource
  • 动态添加╱删除的Spinner 菜单 : ArrayList 与Widget 的依赖性

 

 

14. 专业相框设计

1)ImageView 的堆叠应用

    利用 ImageView 的堆叠,将上例中的实现不同相框的更换

示例代码

① 新建工程
② 准备三张png 图片

    技术分享

③ 修改main.xml 布局,添加UI 元素

<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout    //使用的是绝对布局
android:id="@+id/widget34"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="
http://schemas.android.com/apk/res/android"
><!--创建第一个ImageView (第二层图片)-->
<ImageView
android:id="@+id/myImageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_x="0px"
android:layout_y="36px"
/>
<!--创建第二个ImageView (第一层图片)-->
<ImageView
android:id="@+id/myImageView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_x="0px"
android:layout_y="36px"
/>
<!--创建第一个Button -->
<Button

android:id="@+id/myButton1"
android:layout_width="105px"
android:layout_height="66px"
android:text="pic1"
android:layout_x="9px"
android:layout_y="356px"
/>
<!--创建第二个Button -->
<Button
android:id="@+id/myButton2"
android:layout_width="105px"
android:layout_height="66px"
android:text="pic2"
android:layout_x="179px"
android:layout_y="356px"
/>
</AbsoluteLayout>

 

④ 修改mainActivity.java

package zyf.Ex_Ctrl_7;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

public class Ex_Ctrl_7 extends Activity {
   
 // Called when the activity is first created. 
    // 声明Button、ImageView 对象

    private ImageView mImageView01;
    private ImageView mImageView02;
    private Button mButton01;
    private Button mButton02;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
 // 取得Button、ImageView 对象
        mImageView01 = (ImageView) findViewById(R.id.myImageView1);
        mImageView02 = (ImageView) findViewById(R.id.myImageView2);
        mButton01 = (Button) findViewById(R.id.myButton1);
        mButton02 = (Button) findViewById(R.id.myButton2);
       

        // 设置ImageView 背景图
        mImageView01.setImageDrawable(getResources().getDrawable(R.drawable.right));

        mImageView02.setImageDrawable(getResources().getDrawable(R.drawable.photo));
       

        // 用OnClickListener 事件来启动
        mButton01.setOnClickListener(new Button.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 当启动后, ImageView 立刻换背景图
                mImageView01.setImageDrawable(getResources().getDrawable(R.drawable.right));
            }
        });

     
        mButton02.setOnClickListener(new Button.OnClickListener() {
            @Override
            public void onClick(View v) {
                mImageView01.setImageDrawable(getResources().getDrawable(R.drawable.left));
            }
        });
    }
}

 

⑤ 结果

技术分享

 

 

 

2)ImageButton 的堆叠应用

    利用 ImageButton 的背景图和按键响应,将上例中的 ImageView 和 Button 结合到一起,通过堆叠 ImageButton 实现相框的更换。

示例代码

① 新建项目
② 准备三张png 图片

    技术分享

③ 修改main.xml 布局,添加UI 元素

技术分享

④ 修改mainActivity.java

package zyf.Ex_Ctrl_7_B;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageButton;

public class Ex_Ctrl_7_B extends Activity {
    // Called when the activity is first created.
    //声明ImageButton
    private ImageButton back_Imagebutton,photo_Imagebutton;
    private boolean Tag=true;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        //从XML中获取控件对象
        back_Imagebutton=(ImageButton)findViewById(R.id.myImageButton_Back );
        photo_Imagebutton=(ImageButton)findViewById(R.id.myImageButton_Photo );
        //设置默认的背景图片
        back_Imagebutton.setBackgroundResource(R.drawable.left);
        photo_Imagebutton.setBackgroundResource(R.drawable.photo);
      

        //给ImageButton设置事件监听器
        photo_Imagebutton.setOnClickListener(new ImageButton.OnClickListener(){
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Tag=!Tag;

                //更改背景图片
                if(Tag){
                    back_Imagebutton.setBackgroundResource(R.drawable.right);
                }else{
                    back_Imagebutton.setBackgroundResource(R.drawable.left);
                }
            }
        });
    }
}

⑤ 结果

技术分享

 

 

 

15. 自定义下拉菜单

     Spinner 标签: 定义一个下拉菜单。

       setDropDownViewResource :为自定义下拉菜单设置样式。

示例代码

① 新建项目,在res 目录下新建一个anim 文件夹,存放动画效果用,在其中新建一个my_anim.xml 文件

技术分享

② 在res 目录下的layout 文件夹中新建一个myspinner_dropdown.xml 文件,用来存放下拉菜单弹出内容的布局

技术分享

③ 修改main.xml,添加UI 元素

技术分享

技术分享

 

④ 定义一个下拉菜单

技术分享

 

技术分享

 

⑨ mainActivity.java 完整代码

package zyf.Ex_Ctrl_8;
import android.app.Activity;
import android.os.Bundle;

import android.view.MotionEvent;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.TextView;

public class Ex_Ctrl_8 extends Activity {
    // Called when the activity is first created.
    private static final String[] countriesStr ={ " 北京市", " 上海市", " 天津市", " 重庆市" };
    private TextView myTextView;
    private Spinner mySpinner;
    private ArrayAdapter<String> adapter;
    Animation myAnimation;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 载入main.xml Layout
        setContentView(R.layout.main);
        // 以findViewById() 取得对象
        myTextView = (TextView) findViewById(R.id.TextView_Show);
        mySpinner = (Spinner) findViewById(R.id.spinner_City);
       

        //取得Animation 定义在res/anim 目录下
        myAnimation = AnimationUtils.loadAnimation(this, R.anim.my_anim);
        adapter=new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, countriesStr );
       

        // myspinner_dropdown 为自定义下拉菜单样式定义在res/layout 目录下
        adapter.setDropDownViewResource(R.layout.myspinner_dropdown);
      

        // 给下拉菜单添加内容Adapter适配器
        mySpinner.setAdapter(adapter);


        //下拉菜单弹出的内容选项被选中事件处理
        mySpinner.setOnItemSelectedListener(new Spinner.OnItemSelectedListener(){
            public void onItemSelected(AdapterView<?> arg0, View arg1,int arg2, long arg3) {
                // TODO Auto-generated method stub
                // 将所选mySpinner 的值带入myTextView 中
                myTextView.setText(setText("您选择的是:"+ countriesStr [arg2]);
                // 将mySpinner 显示

                arg0.setVisibility(View.VISIBLE);
            }
            public void onNothingSelected(AdapterView<?> arg0) {
                // TODO Auto-generated method stub
                myTextView.setText("NONE");
            }
        });


        //下拉菜单弹出的内容选项触屏事件处理
        mySpinner.setOnTouchListener(new Spinner.OnTouchListener(){
            public boolean onTouch(View v, MotionEvent event) {
                // TODO Auto-generated method stub
                // 将mySpinner 运行Animation
                v.startAnimation(myAnimation);
                // 将mySpinner 隐藏
                v.setVisibility(View.INVISIBLE);
                return false;
            }
        });


        //下拉菜单弹出的内容选项焦点改变事件处理
        mySpinner.setOnFocusChangeListener(new Spinner.OnFocusChangeListener(){
            public void onFocusChange(View v, boolean hasFocus) {
                // TODO Auto-generated method stub
            }
        });
    }
}

 

⑩ 结果

技术分享

 

关键点

1. Android 控件之 Spinner

    Spinner是一个每次只能选择所有项的一个项的控件。它的项来自于与之相关联的适配器中。

    详见http://blog.sina.com.cn/s/blog_4b3c1f950100qzqt.html

2. 适配器 Adapter

    一个Adapter的对象扮演一个桥梁的角色。这个桥梁连接着一个 AdapterView 和它所包含的数据 。

    详见http://blog.sina.com.cn/s/blog_4b3c1f950100qzro.html  

3. AdapterView

   AdapterView 是内容由 Adapter 来决定的视图类。

参见子类 ListView、GridView、Spinner 和 Gallery 等。

 

 

16. 动态添加╱删除的Spinner 菜单

核心代码

// mainActivity.java,实现动态添加和删除

public class Ex_Ctrl_9ME extends Activity implementsButton.OnClickListener,Spinner.OnItemSelectedListener

{
   
 // Called when the activity is first created.
    //声明程序使用的对象

    private TextView show_yourChoice_TextView;
    private EditText input_City_EditText;
    private Button Add_Button, Del_Button;
    private Spinner city_Spinner;
    private ArrayAdapter<String> arrayAdapter;
    private String[] cities;
    private String addString;
    private List<String> cityList;
   

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //设置主屏显示布局为main.xml
        setContentView(R.layout.main);
       
 //findViewByID()获取XML中的UI元素
        show_yourChoice_TextView = (TextView) findViewById(R.id.TextView_Show_yourChoice );
        input_City_EditText = (EditText) findViewById(R.id.EditView_Input);
        Add_Button = (Button) findViewById(R.id.Button_ADD);
        Del_Button = (Button) findViewById(R.id.Button_DEL);
        city_Spinner = (Spinner) findViewById(R.id.Spinner_Slecte);
      

        //初始化字符串数组

        cities = new String[] { "Android", "BlackBerry", "J2ME","Symbian","Broncho", "LinuxMobile","Palm","WindwosMobile" };      

        //初始化List实例ArrayList的对象

        cityList = new ArrayList<String>();
     
   //遍历,把字符串数组添加到ArrayList中
        for (int i = 0; i < cities.length; i++) {
            cityList.add(cities[i]);
        }

        // 这里应该使用List<> ,如果使用String[]则会出错
        //初始化下拉菜单的内容适配器
        arrayAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, cityList);
       
 //设置下拉菜单显示内容的风格
        arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item );
       
 //给下拉菜单对象添加内容适配器
        city_Spinner.setAdapter(arrayAdapter);
       //默认启动时文本标题显示
        show_yourChoice_TextView.setText(arrayAdapter.getItem(0));
       
 //默认启动时下拉菜单第一项被选中
        city_Spinner.setSelection(0);
        //为按钮添加点击事件监听器
        Add_Button.setOnClickListener(this);
        Del_Button.setOnClickListener(this);
        //为下拉菜单添加选项选中事件监听器
        city_Spinner.setOnItemSelectedListener(this);
    }

 

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        switch (v.getId()) {
            //区别按钮来进行不同动作
            case R.id.Button_ADD:
                //显示Toast提示
                Toast.makeText(this, "添加", Toast.LENGTH_SHORT).show();
               //获得输入框中的将要添加的字符串
                addString = input_City_EditText.getText().toString();
               
 //遍历,比较是否和下拉菜单中内容重复
                for (int i = 0; i < arrayAdapter.getCount(); i++) {
                    if (addString.equals(arrayAdapter.getItemId(i))) {
                        return;   //重复了,则跳出
                    }

                }

                //如果添加字符串不为""
                if (!addString.equals("")) {
                    //添加进适配器中
                    arrayAdapter.add(addString);
                   //获取刚刚添加进的字符串位置
                    int post = arrayAdapter.getPosition(addString);
                    //设置刚刚添加进的下拉菜单内容被选中
                    city_Spinner.setSelection(post);
                    //清空输入框
                    input_City_EditText.setText("");
                }

               break;
            case
 R.id.Button_DEL:
                if (city_Spinner.getSelectedItem() != null) {
                  
 // 删除mySpinner 的值
                    arrayAdapter.remove(city_Spinner.getSelectedItem().toString());
                    // 将myEditText 清空
                    input_City_EditText.setText("");
                    if (arrayAdapter.getCount() == 0) {
                       
 // 将myTextView 清空
                        Toast.makeText(this, "删完了", Toast.LENGTH_SHORT).show();
                        show_yourChoice_TextView.setText("");
                    }
                }

                break;
            default:
                break;
        }
    }

 

    //下拉菜单选项被选中事件处理
    @Override
    public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,long arg3) {
        // TODO Auto-generated method stub
        show_yourChoice_TextView.setText(arrayAdapter.getItem(arg2));
    }

 

    //未被选中事件处理
    @Override
    public void onNothingSelected(AdapterView<?> arg0) {
        // TODO Auto-generated method stub

    }

 

   //添加Menu菜单进行退出操作
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // TODO Auto-generated method stub
        menu.add("Exit");
        return super.onCreateOptionsMenu(menu);
    }

 

    //Menu菜单退出
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // TODO Auto-generated method stub
        finish();
        return super.onOptionsItemSelected(item);
    }
}

 

 

关键点

1.  Adapter 与AdapterView 之间的依赖性

    数据 – adapter – adapterView

    在对Adapter 进行数据增减时,会直接反应发到adapterView上那对原始数据 list 有影响吗 

 

[转]android学习----基础UI编程(五)

标签:

原文地址:http://www.cnblogs.com/wj033/p/4569703.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!