在前文的基础上,主要增加对点击事件的处理。
首先是点击后的颜色渐变效果,这里新建两个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; } }