样式和基类的抽取

2016-12-23  本文已影响242人  破荒之恋

样式和基类的抽取

1、样式的抽取
在布局文件中有大量相似的属性定义,为了代码的简洁和提高复用性,我们可以提取出相同的定义放在一个地方,让所有用到它的控件来调用它。这就有了样式和基类的出现:我们先来说一下样式的抽取:

<TextView android:layout_width="match_parent" 
android:layout_height="wrap_content" android:padding="5dp" android:background="@android:color/holo_blue_bright" 
android:gravity="center" android:textSize="25sp" 
android:text="欢迎使用手机防盗"/> 
<TextView android:layout_width="match_parent" 
android:layout_height="wrap_content" android:padding="5dp" 
android:background="@android:color/holo_blue_bright" 
android:gravity="center" android:textSize="25sp" 
android:text="欢迎使用手机杀毒/> 
<TextView android:layout_width="match_parent" 
android:layout_height="wrap_content" android:padding="5dp" 
android:background="@android:color/holo_blue_bright" 
android:gravity="center" android:textSize="25sp" 
android:text="欢迎使用手机流量控制/>

上面三个textview的定义都是在三个不同的布局文件中使用的,他们有共同的属性,那就可以把他们抽取出来放在values文件夹下的style.xml文件中:定义如下:

<style name="text_setup_title"> 
<item name="android:textSize">25sp</item> 
<item name="android:gravity">center</item> 
<item name="android:background">@android:color/holo_blue_bright</item>
 <item name="android:padding">5dp</item>
 <item name="android:layout_width">match_parent</item> 
<item name="android:layout_height">wrap_content</item></style>

这样大大简化了代码的书写,以后不管哪里需要用到类似的布局设置只要引用即可

<TextView style="@style/text_setup_title"
 android:text="欢迎使用手机防盗"/> 
<TextView style="@style/text_setup_title" 
android:text="欢迎使用手机杀毒"/> 
<TextView style="@style/text_setup_title" 
android:text="欢迎使用手机流量控制"/>

这样是不是方便了很多呢。
2、基类的抽取:
基类的抽取和样式的原理差不多,都是简化了代码的书写,基类的抽取是把相同的代码抽取出来放在一个基类中,以后谁想用这些方法就可以直接继承这个基类实现里面的方法。下面来看一个例子:
基类的实现:

public abstract class SetupBaseActivity extends Activity { 
SharedPreferences sp; //先声明一个手势识别器 
private GestureDetector mGestureDetector; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState);
 sp=getSharedPreferences("config", MODE_PRIVATE); 
//2、初始化手势识别器 
mGestureDetector=new GestureDetector(getApplicationContext(), new GestureDetector.SimpleOnGestureListener(){ 
@Override 
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
 /** * e1、手指触摸屏幕的一瞬间 * e2、手指离开屏幕的一瞬间 * velocityX、velocityY:水平方向和竖直方向的速度,单位px/s *
 */ 
if(Math.abs(e1.getRawY()-e2.getRawY())>100){
 ToastUtils.show(SetupBaseActivity.this, "动作不合法"); 
return true; } 
if((e1.getRawX()-e2.getRawX())>150)
{ showNext(); 
overridePendingTransition(R.anim.trans_next_in, R.anim.trans_next_out); 
return true; }
 if((e2.getRawX()-e1.getRawX())>150){ showPre(); 
overridePendingTransition(R.anim.trans_pre_in, R.anim.trans_pre_out); 
return true; } 
return super.onFling(e1, e2, velocityX, velocityY); } }); } 
//第三步、是手势识别器识别用户的动作 
@Override 
public boolean onTouchEvent(MotionEvent event) {
 mGestureDetector.onTouchEvent(event); 
return true; } 
//子类要实现的方法 public abstract void showNext(); public abstract void showPre();
 /** * 下一步 * 
@param view 
*/ 
public void next(View view){ showNext(); 
overridePendingTransition(R.anim.trans_next_in, R.anim.trans_next_out); } 
/** * 上一步 * @param view */ 
public void pre(View view)
{ showPre(); 
overridePendingTransition(R.anim.trans_pre_in, R.anim.trans_pre_out); 
}
}

子类的实现:

1、子类一

public class Setup1Activity extends SetupBaseActivity { 
@Override 
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_setup1); 
} 
@Override 
public void showNext() { 
IntentUtils.startActivityAndFinish(Setup1Activity.this, Setup2Activity.class); 
} 
@Override public void showPre() { } } 

2、子类二

public class Setup2Activity extends SetupBaseActivity { 
private SettingCheckView setcheck;
 private TelephonyManager tm; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_setup2); //电话管理,系统的服务,可以获
得sim卡的唯一序列号 tm=(TelephonyManager) 
this.getSystemService(Context.TELEPHONY_SERVICE); 
setcheck = (SettingCheckView) findViewById(R.id.set_bind_text); 
final String sim=sp.getString("sim", null);
 if(TextUtils.isEmpty(sim)){
   ToastUtils.show(this, "手机还没有绑定手机号");
 }else{ 
  setcheck.setChecked(true);
 } 
  setcheck.setOnClickListener(new OnClickListener() { 
@Override 
public void onClick(View v) {
  Editor edit=sp.edit();
  if(TextUtils.isEmpty(sim)){
  setcheck.setChecked(true); 
  String sim1=tm.getSimSerialNumber(); 
 edit.putString("sim", sim1); 
}else{
  setcheck.setChecked(false); 
  edit.putString("sim", null); } edit.commit(); } }); 
} 
@Override
  public void showNext() {
    String sim=sp.getString("sim",null);
   if(TextUtils.isEmpty(sim)){ //判断sim卡序列号是否为空 
   ToastUtils.show(this,"开启手机防盗,必须绑定手机序列号"); 
}else{
   IntentUtils.startActivityAndFinish(Setup2Activity.this, Setup3Activity.class); 
} 
} 
@Override 
public void showPre() {
     IntentUtils.startActivityAndFinish(Setup2Activity.this, Setup1Activity.class);
 }
 } 

3、子类三

public class Setup3Activity extends SetupBaseActivity { 
private Button contacts_select; 
private EditText ed_select_number; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
  super.onCreate(savedInstanceState); 
  setContentView(R.layout.activity_setup3); 
  ed_select_number=(EditText) findViewById(R.id.ed_select_number);
   ed_select_number.setText(sp.getString("phone", "")); //获取联系人列表        
    contacts_select=(Button) findViewById(R.id.btn_select_contacts); 
    contacts_select.setOnClickListener(new OnClickListener() { 
@Override 
  public void onClick(View v) { //选择联系人 //开启一个界面并返回值 
  Intent intent=new Intent(Setup3Activity.this,ContactsActivity.class);
   startActivityForResult(intent, 0); } });
 } 
@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) 
{
   if(data!=null)
    { if(resultCode==0){ //获取返回的电话号码并显示到控件上 
       String savedphone=data.getStringExtra("phone"); 
       ed_select_number.setText(savedphone);
   }
 } 
    super.onActivityResult(requestCode, resultCode, data);
 } 
@Override
  public void showNext() {
     if(TextUtils.isEmpty(ed_select_number.getText())){ 
    ToastUtils.show(Setup3Activity.this, "安全号码不能为空"); 
}else{ 
    String phone=ed_select_number.getText().toString().replace("-", "").trim(); 
    Editor edit=sp.edit(); 
    edit.putString("phone", phone); edit.commit(); 
    IntentUtils.startActivityAndFinish(Setup3Activity.this, Setup4Activity.class);
 } 
} @Override public void showPre() { 
    IntentUtils.startActivityAndFinish(Setup3Activity.this, Setup2Activity.class);
 } 
}

里面用到了一些自定义开启意图的方法:
自定义了Activity的开启的方式,开启意图的工具类

/** * 开启意图的方式 * 
@author Administrator *
 */ 
public class IntentUtils { /** * 进入一个界面 */ 
public static void startActivityInfo(Activity context,Class<?>cls){ 
Intent intent=new Intent(context,cls); 
context.startActivity(intent);
 } 
/** * 进入一个界面并结束自己 */ 
public static void startActivityAndFinish(Activity context,Class<?>cls){ 
Intent intent=new Intent(context,cls); 
context.startActivity(intent); context.finish(); } 
/** * 延迟进入进入一个界面 * */ 
public static void startActivityDelay(final Activity context,final
 Class<?>cls,final long time){ 
new Thread(){ 
  @Override 
  public void run() { 
    try { 
    Thread.sleep(time);
 } catch (InterruptedException e) 
  { e.printStackTrace(); } 
    Intent intent=new Intent(context,cls); 
    context.startActivity(intent); } }.start();
 }
 /** * 延迟进入进入另一个界面并销毁这个界面 * */ 
public static void startActivityDelayAndFinish(final Activity context,final   Class<?>cls,final long time){
   new Thread(){ 
  @Override 
  public void run() { 
    try { Thread.sleep(time); 
    }catch (InterruptedException e) { 
    e.printStackTrace();
   } 
    Intent intent=new Intent(context,cls); 
    context.startActivity(intent); context.finish(); 
  } 
  }.start(); } 
}      
上一篇 下一篇

猜你喜欢

热点阅读