各位前辈们帮帮看下,为什么。代码如下
public class SettingFragment extends Fragment {
EditText ip;
Button editIp;
SharedPreferences config;
@Override
public void onCreate(Bundle savedInstanceState) {
config = this.getActivity().getSharedPreferences("config", Context.MODE_PRIVATE);
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.common_setting_frag, container, false);
ip = (EditText)view.findViewById(R.id.common_function_etSetIp);
editIp = (Button) view.findViewById(R.id.common_function_btnSetIp);
String ipConfig = config.getString("ServerAddress", "");
if("".equals(ipConfig)){
ip.setHint("请输入服务器IP地址");
}else{
ip.setFocusable(false);
ip.setText(Regex.returnIp(ipConfig)[0]);
ip.setTextColor(this.getResources().getColor(R.color.gray));
}
editIp.setText("编辑");
ip.setOnClickListener(etListener);
editIp.setOnClickListener(btnListener);
return view;
}
@Override
public void onDestroy() {
super.onDestroy();
}
OnClickListener btnListener = new OnClickListener(){
public void onClick(View v) {
if(ip.isFocusable()){
String ipString = ip.getText().toString();
if(Regex.isIp(ipString)){
Editor editor = config.edit();
editor.putString("ServerAddress", "http://" + ipString + "/Czp/services/");
editor.commit();
ip.setFocusable(false);
ip.setTextColor(getResources().getColor(R.color.gray));
editIp.setText("编辑");
}else{
Toast.makeText(getActivity(), "IP输入格式不对", Toast.LENGTH_SHORT).show();
}
}else{
ip.setFocusable(true);
ip.setTextColor(getResources().getColor(R.color.black));
editIp.setText("保存");
}
}
};
OnClickListener etListener = new OnClickListener() {
public void onClick(View v) {
if(!ip.isFocusable()){
ip.setFocusable(true);
ip.setTextColor(getResources().getColor(R.color.black));
editIp.setText("保存");
}
}
};
}
布局文件如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:background="@drawable/background_common"
>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<EditText
android:id="@+id/common_function_etSetIp"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
>
</EditText>
<Button
android:id="@+id/common_function_btnSetIp"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="4"
style="@style/style_button"
/>
</LinearLayout>
</LinearLayout>
我看过好几遍,逻辑上似乎并没有问题。可是就是无法编辑。
12 个解决方案
#1
我希望:当点击不可编辑(获取焦点)的EnitText时,EditText可编辑,直接获取焦点,弹出软键盘;或者当EditText不可编辑(获取焦点)时,点击button将其变为可编辑(改变样式),之后点击EditText弹出软键盘。
我在布局文件中给那个EditText设置了
点击按钮干脆什么都没有。
我在布局文件中给那个EditText设置了
android:focusable="false"之后现在点击EnitText之后可以看到有光标在最前面闪烁,但是仍然不可编辑。
点击按钮干脆什么都没有。
#2
你试下设置enable为true
#3
用setFocusable(false)不成,要用requestFocus();
要请求焦点,而不是设置焦点
要请求焦点,而不是设置焦点
#4
、
谢谢二位的帮忙,你们的办法我分别单独试了,也结合起来试了。都不可以的。
#5
ip.setFocusable(false);
无法获取焦点,如何能出发按钮单击事件
点击按钮应该执行
ip.setFocusable(true);
ip.setTextColor(getResources().getColor(R.color.black));
editIp.setText("保存");
无法获取焦点,如何能出发按钮单击事件
点击按钮应该执行
ip.setFocusable(true);
ip.setTextColor(getResources().getColor(R.color.black));
editIp.setText("保存");
#6
唉,唉……就算设置setFocusable(true);也不管用!不过还是谢谢你了。
#7
我这个需求后来自己发现不太对,我改得更方便了。不过这个技术问题还是没有解决。
我后来把需求变了下,功能是实现了,但是这个技术问题还没解决。
#8
加上setFocusableInTouchMode(true); 就可以了。
#9
edit_sbumit.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
edit_sbumit.setFocusable(true);
edit_sbumit.setFocusableInTouchMode(true);
edit_sbumit.requestFocus();
edit_sbumit.requestFocusFromTouch();
}
});
给那个edit设置一个点击事件 然后按照步骤去申请焦点,一定要按照我那个代码的步骤
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
edit_sbumit.setFocusable(true);
edit_sbumit.setFocusableInTouchMode(true);
edit_sbumit.requestFocus();
edit_sbumit.requestFocusFromTouch();
}
});
给那个edit设置一个点击事件 然后按照步骤去申请焦点,一定要按照我那个代码的步骤
#10
我来终极解决方案:
setFocusableInTouchMode(false||true)解决一切尴尬。
setFocusableInTouchMode(false||true)解决一切尴尬。
#11
楼上膜拜,一用就灵,想失去焦点就用 setFocusableInTouchMode(false),想重新获得就用setFocusableInTouchMode(true)!
#12
后排友情提示:如果是Listview中出现了这样的问题请看下你的item是不是加了android:descendantFocusability
#1
我希望:当点击不可编辑(获取焦点)的EnitText时,EditText可编辑,直接获取焦点,弹出软键盘;或者当EditText不可编辑(获取焦点)时,点击button将其变为可编辑(改变样式),之后点击EditText弹出软键盘。
我在布局文件中给那个EditText设置了
点击按钮干脆什么都没有。
我在布局文件中给那个EditText设置了
android:focusable="false"之后现在点击EnitText之后可以看到有光标在最前面闪烁,但是仍然不可编辑。
点击按钮干脆什么都没有。
#2
你试下设置enable为true
#3
用setFocusable(false)不成,要用requestFocus();
要请求焦点,而不是设置焦点
要请求焦点,而不是设置焦点
#4
你试下设置enable为true
用setFocusable(false)不成,要用requestFocus();
要请求焦点,而不是设置焦点
、
谢谢二位的帮忙,你们的办法我分别单独试了,也结合起来试了。都不可以的。
#5
ip.setFocusable(false);
无法获取焦点,如何能出发按钮单击事件
点击按钮应该执行
ip.setFocusable(true);
ip.setTextColor(getResources().getColor(R.color.black));
editIp.setText("保存");
无法获取焦点,如何能出发按钮单击事件
点击按钮应该执行
ip.setFocusable(true);
ip.setTextColor(getResources().getColor(R.color.black));
editIp.setText("保存");
#6
ip.setFocusable(false);
无法获取焦点,如何能出发按钮单击事件
点击按钮应该执行
ip.setFocusable(true);
ip.setTextColor(getResources().getColor(R.color.black));
editIp.setText("保存");
唉,唉……就算设置setFocusable(true);也不管用!不过还是谢谢你了。
#7
我希望:当点击不可编辑(获取焦点)的EnitText时,EditText可编辑,直接获取焦点,弹出软键盘;或者当EditText不可编辑。
你试下设置enable为true
用setFocusable(false)不成,要用requestFocus();
要请求焦点,而不是设置焦点
我这个需求后来自己发现不太对,我改得更方便了。不过这个技术问题还是没有解决。
ip.setFocusable(false);
无法获取焦点,如何能出发按钮单击事件
点击按钮应该执行。
我后来把需求变了下,功能是实现了,但是这个技术问题还没解决。
#8
加上setFocusableInTouchMode(true); 就可以了。
我希望:当点击不可编辑(获取焦点)的EnitText时,EditText可编辑,直接获取焦点,弹出软键盘;或者当EditText不可编辑。 你试下设置enable为true 用setFocusable(false)不成,要用requestFocus();
要请求焦点,而不是设置焦点
我这个需求后来自己发现不太对,我改得更方便了。不过这个技术问题还是没有解决。 ip.setFocusable(false);
无法获取焦点,如何能出发按钮单击事件
点击按钮应该执行。
我后来把需求变了下,功能是实现了,但是这个技术问题还没解决。
#9
edit_sbumit.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
edit_sbumit.setFocusable(true);
edit_sbumit.setFocusableInTouchMode(true);
edit_sbumit.requestFocus();
edit_sbumit.requestFocusFromTouch();
}
});
给那个edit设置一个点击事件 然后按照步骤去申请焦点,一定要按照我那个代码的步骤
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
edit_sbumit.setFocusable(true);
edit_sbumit.setFocusableInTouchMode(true);
edit_sbumit.requestFocus();
edit_sbumit.requestFocusFromTouch();
}
});
给那个edit设置一个点击事件 然后按照步骤去申请焦点,一定要按照我那个代码的步骤
#10
我来终极解决方案:
setFocusableInTouchMode(false||true)解决一切尴尬。
setFocusableInTouchMode(false||true)解决一切尴尬。
#11
楼上膜拜,一用就灵,想失去焦点就用 setFocusableInTouchMode(false),想重新获得就用setFocusableInTouchMode(true)!
#12
后排友情提示:如果是Listview中出现了这样的问题请看下你的item是不是加了android:descendantFocusability