我有一个带有默认文字的EditText。
现在,当用户点击该EditText时,默认文本应更改为某些内容。
我得到的是:
如何解决这个问题,它是从第一次开始的?
这是我的xml:
<EditText
android:id="@+id/step"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginTop="5dp"
android:hint="@string/hnt_message"
android:text="Default text"
android:maxLength="@integer/max_free_msg_length"
android:maxLines="2"
/>
这是我的片段代码:
private EditText editMessage;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
mContentView = inflater.inflate(R.layout.fragment_step, container, false);
ButterKnife.inject(this, mContentView);
editMessage = (EditText) mContentView.findViewById(step);
editMessage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
clearEditMessageText();
}
});
}
我知道我可以使用奶油刀来制作这个按钮,但是我做了,但那并没有奏效。
答案 0 :(得分:14)
将EditText的焦点设置为false。首先点击获得焦点到EditText。
<EditText
android:id="@+id/step"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginTop="5dp"
android:hint="@string/hnt_message"
android:text="Default text"
android:maxLength="@integer/max_free_msg_length"
android:maxLines="2"
android:focusable="false"
/>
更新: 好吧,在你的情况下,你可以使用onFocusChangeListnere而不是onClickListener。
edittext.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View view, boolean b) {
if (b) {
//do something
}
}
});
答案 1 :(得分:0)
在布局onClick的xml文件中,选择代码中的相应函数。
<Button
android:layout_width="460dp"
android:layout_height="0dp"
android:layout_weight="1"
android:onClick="onClick_Action_Function" />
在您的实际代码中执行此操作
public void onClick_Action_Function(View view) {
//do stuff
}
不要这样做(这将使第一个onClick函数尝试调用第二个onClick函数)
public void onClick_Action_Function(View view) {
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
}
答案 2 :(得分:0)
我在使用 editText 时遇到了这个问题,我希望玩家在其中输入角色名称。我不喜欢使用提示,因为提示也放在弹出的键盘窗口中,我希望它最初是空白的。所以我最初在editText中添加了名称请求。我想在第一次点击时将其擦除。第一次点击触发了弹出式键盘,但不会触发“setOnClickListener”来擦除该字段。我通过在“setOnFocusChangeListener”上调用 performClick 操作解决了这个问题。
这对我来说似乎仍然有点麻烦,但是按照建议将 focusable 或 focusableInTouchMode 更改为 false 会阻止弹出式键盘显示。
charnameEditText.setText("Enter Name Here");
....
charnameEditText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
public void onFocusChange(View view, boolean hasFocus) {
if (hasFocus) {
view.performClick();
}
}
});
//Normally not called by first click
charnameEditText.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
charnameEditText.setText("");
}
});