计算器的模拟设计(简略)(改)

在前文的基础上,主要增加对点击事件的处理。

首先是点击后的颜色渐变效果,这里新建两个drawable文件,一个为selector_white_bg.xml,另外一个为selector_orange_bg.xml

代码和注释如下:

selector_white_bg.xml:

1 <?xml version="1.0" encoding="utf-8"?>
2 <selector xmlns:android="http://schemas.android.com/apk/res/android">
    // 属性state_pressed来表明按住状态,后接其他类型的属性来表明当触发点击时的效果(注意selector标签和item标签 3 <item android:state_pressed="true" android:drawable="@drawable/shape_rectangle_white_grey" /> 4 <item android:drawable="@drawable/shape_rectangle" /> 5 </selector>

 

selector_orange_bg.xml:

1 <?xml version="1.0" encoding="utf-8"?>
2 <selector xmlns:android="http://schemas.android.com/apk/res/android">
3     <item android:state_pressed="true" android:drawable="@drawable/shape_rectangle_orange_grey" />
4     <item android:drawable="@drawable/shape_rectangle_orange" />
5 </selector>

 

点击事件的处理的两种方法:

第一种: 在要被点击的控件里添加onClick属性

  格式: android:onClick="方法名" eg: android:onClick="oneOnClick或者oneOrangeClick"

  接着在对应的布局的activity上面写一个方法,这个方法的格式为:

  public void 方法名 (View view){// View 就是我们创建的app的界面

  ...

  }

  代码案例:

1 public void oneOnClick(View view){
2         Log.d(TAG,"one be click ...");
3         if(view instanceof TextView){
4           String text = ((TextView)view).getText().toString();
5             Log.d(TAG, "text === " + text);
6         }
7     }

  该代码的作用是,当TextView内的onClick属性触发时,执行该方法。此方法为取得所点击内容,然后在logcat中显示“text  ===内容”

 

第二种方式:

  通过ID声明来找到控件,然后呢,对这个控件设置点击事件

  第一步,给对应的控件添加id。

  第二步,在对应的activity中找到控件

  第三步,设置点击事件。

  alt + ctrl + f 可以将变量改成成员变量(注意qq,会变成文字识图)

  具体的代码和注释如下:

 protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.catcular_layout);
        // 找控件
        initView();

        // 设置点击事件
        initClickEvent();
    }

    /**
     * 找到控件
     */

    private void initView(){
        mCancel = (TextView) this.findViewById(R.id.tv_cancel);
        mPlus_or_minus = (TextView) this.findViewById(R.id.tv_plus_or_minus);
        mMod = (TextView) this.findViewById(R.id.tv_mod);
        mDivider = (TextView) this.findViewById(R.id.tv_divider);

    }

    /**
     * 设置点击事件
     */
    private void initClickEvent(){

        // 第一种设置方式,通过添加监听接口和重写监听接口中的onClick属性
        mCancel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.d(TAG,"content === " + ((TextView) v).getText().toString());
            }
        });

        // 第二种设置方式,通过重写onclick属性
        mPlus_or_minus.setOnClickListener(this);

        mMod.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.d(TAG, "content === " + ((TextView) v).getText().toString());
            }
        });
        mDivider.setOnClickListener(this);
    }

 @Override
    public void onClick(View v) {

        // 如果有多个控件设置点击事件,这里为统一处理过程,所以需要判断为哪个控件
//        if(v == mPlus_or_minus){
//            Log.d(TAG, "content === ++/--" + ((TextView)v).getText().toString());
//        }
//        else if(v == mDivider){
//            Log.d(TAG, "content === //" + ((TextView)v).getText().toString());
//        }

        // 当然也可以用switch来处理
        // 拿到id
        int id = v.getId();
        switch (id){
            case R.id.tv_plus_or_minus:
                Log.d(TAG, "content === ++/--" + ((TextView)v).getText().toString());
                break;
            case R.id.tv_divider:
                Log.d(TAG, "content === //" + ((TextView)v).getText().toString());
                break;
        }
    }

 

计算器的模拟设计(简略)(改)

上一篇:从0到1手把手开发脚手架


下一篇:WebGL 规范(WebGL Specification)