前言:管他黑猫白猫,抓到老鼠就是好猫,你觉得老板会理你有没有用老鼠笼?
相信看到这个博客的你,一定很烦恼,因为我在写这篇博客之前也是,很多朋友的博客都是用这三个玩意(clickable,focusable,enabled)来这实现这个功能,但是我用了他们的代码后发现“妈的,这是什么鬼?”怎么试都是扯淡,所以我最后曲线救国,想了这个方法,保证可以。
首先我说说需求,某个界面既是新增又是修改界面,当新增的时候EditText就是正常的EditText;当时修改界面的时候,点击EdiText就跳转到另一个界面进行修改,就像那种搜索框,现在的搜索框点击后一般都是跳转到令一个界面去修改,反正这时候EditText就充当一个Button来用。
//true代表是修改界面
private boolean isEdit = false;
mEditProjectName.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//只有修改界面的时候触发。
if(isEdit){
Intent intent = new Intent();
intent.setClass(A.this, B.class);
intent.putExtra("strContent", mEditProjectName.getText().toString());
intent.putExtra("strTitle", mContext.getString(R.string.modify_project_name));
startActivityForResult(intent, ConstantData.REQUEST_NOTE_TITLE);
}
}
});
if(isEdit){
//可用可点击不可获取焦点
mEditProjectName.setEnabled(true);
mEditProjectName.setClickable(true);
mEditProjectName.setFocusable(false);
}else{
//啥也不用管,EditText本来是什么样就什么样,上面的点击事件他进不去的。
}
另外,这个方法我说是曲线救国,其实是没有错的,因为EditText继承自TextView,而在我们使用的过程中可以体现出来的差别就是EditText是否可以编辑,而下面这三行代码就是把这个属性干掉了,所以此时此刻它就是就是一个TextView。
//丛我们可见的程度上来说设置了这三个属性EditText就变成了TextView
mEditProjectName.setEnabled(true);
mEditProjectName.setClickable(true);
mEditProjectName.setFocusable(false);
所以,面对我上面同样的需求,一个TextView怎么处理此时的EditText就怎么处理,这样是不是可以很好的理解了。
当然,如果你这个方法也不想用,还有一个方法。用两个控件,用一个FrameLayout布局将一个EditText一个TextView叠起来,按照需求显示;