疯狂Android入门_事件处理

Android事件处理:

---------------------------------------------------------------------

1.基于监听的事件处理方式

事件:Event Source,Event,Event Listener。

监听步骤:获取控件对象---实现某一个XxxListener监听器接口---将监听器通过setXxxListener绑定在控件对象上。

Listener接口:OnClickListener,OnKeyListener,OnLongClickListener,OnTouchListener,OnFocusChangeListener,OnCreateContextMenuListener,OnCheckChangeListener,……。

监听器的实现方式:

(1)内部类形式

View Code
public class EventQs extends Activity
{
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        //获取应用程序中的bn按钮
        Button bn = (Button)findViewById(R.id.bn);
        //为按钮绑定事件监听器。
        bn.setOnClickListener(new MyClickListener());
    }
    //定义一个单击事件的监听器
    class MyClickListener implements View.OnClickListener
    {
        //实现监听器类必须实现的方法,该方法将会作为事件处理器
        @Override
        public void onClick(View arg0)
        {
            EditText txt = (EditText)findViewById(R.id.txt);
            txt.setText("bn按钮被单击了!");
        }        
    }
}

(2)外部类形式

(3)匿名内部类形式

View Code
public class AnonymousListener extends Activity
{
    EditText show;
    Button bn;    
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        show = (EditText)findViewById(R.id.show);
        bn = (Button)findViewById(R.id.bn);
        //直接使用Activity作为事件监听器
        bn.setOnClickListener(new OnClickListener()
        {
            //实现事件处理方法
            @Override
            public void onClick(View v)
            {
                // TODO Auto-generated method stub
                show.setText("bn按钮被单击了!");
            }            
        });
    }
}

(4)Activity本身作为事件监听器类

View Code
//实现事件监听器接口
public class ActivityListener extends Activity
    implements OnClickListener
{
    EditText show;
    Button bn;
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        show = (EditText)findViewById(R.id.show);
        bn = (Button)findViewById(R.id.bn);
        //直接使用Activity作为事件监听器
        bn.setOnClickListener(this);
    }

    //实现事件处理方法
    @Override
    public void onClick(View v)
    {
        // TODO Auto-generated method stub
        show.setText("bn按钮被单击了!");
    }
}

(5)直接绑定到标签 

 

---------------------------------------------------------------------

2.基于回调的事件处理方式。

View类的回调方法:onKeyDown(),onKeyLongPress(),onKeyShortcut(),onKeyUp(),onTouchEvent(),onTrackballEvent()。

基于回调的事件处理还常用自定义View类来实现:重写View的事件处理方法。

View Code
public class DrawView extends View
{
    public float currentX = 40;
    public float currentY = 50;
    /**
     * @param context
     */
    public DrawView(Context context , AttributeSet set)
    {
        super(context , set);
    }
    @Override
    public void onDraw (Canvas canvas)
    {
        super.onDraw(canvas);
        //创建画笔
        Paint p = new Paint();
        //设置画笔的颜色
        p.setColor(Color.RED);
        //绘制一个小圆(作为小球)
        canvas.drawCircle(currentX , currentY , 15 , p);        
    }
    @Override
    public boolean onTouchEvent(MotionEvent event)
    {
        //当前组件的currentX、currentY两个属性
        this.currentX = event.getX();
        this.currentY = event.getY();
        //通知改组件重绘
        this.invalidate();
        //返回true表明处理方法已经处理该事件
        return true;
    }    
}



//
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<!-- 使用自定义组件 -->
<org.crazyit.event.DrawView
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
/>
</LinearLayout>

基于回调的事件传播:返回true不会对外传播,返回false对外传播。

 

3.Configuration系统设置:手机设备上的配置信息(屏幕,网络信号等)

获取对象:Configuration cfg = getResources().getConfiguration();

Configuration对象中有许多表示系统配置信息的属性:……。

相应系统设置更改:@ onConfigurationChanged()方法。

 

posted @ 2012-09-20 17:34  汤姆是一只猫  阅读(508)  评论(0编辑  收藏  举报