当用户单击它时重新获得对 EditText 的关注
Regain Focus on EditText when User Clicks It
我有一个带有一些 EditText 的 activity,我希望其中一个 EditText 具有以下行为:在 activity 启动时,EditText 填充了一些文本。它不应该显示光标,没有焦点并且不显示键盘(这样用户就可以阅读文本并上下滚动)。然后当用户 clicks/touches EditText 时,它将获得焦点、显示光标和显示键盘(以便用户可以开始编辑)。
启动时的行为正常,但当用户单击 EditText 时我无法使 "start editing" 行为起作用。
这是我的代码:
activity_main.xml:
...
...
<EditText
android:id="@+id/notepad"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="0.5"
android:background="@android:color/transparent"
android:textSize="@dimen/font_large"
android:textStyle="normal"
android:textColor="@color/appPrimaryText"
android:textColorHint="@color/appAccentColour"
android:gravity="top"
android:scrollbars="vertical" />
...
<View
android:layout_width="match_parent"
android:layout_height="@dimen/activity_margin"></View>
</LinearLayout>
MainActivity.java:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mNoteEditText = (EditText) findViewById(R.id.notepad);
final MainActivity mainActivity = this;
mNoteEditText.setFocusable(false);
mNoteEditText.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showToastMessage("here", false);
mNoteEditText.setFocusable(true);
mNoteEditText.requestFocus();
mNoteEditText.setCursorVisible(true);
showKeyboard(mNoteEditText);
}
});
}
public void showKeyboard(EditText editText) {
InputMethodManager inputMethodManager =
(InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE);
inputMethodManager.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);
}
activity 的清单条目是:
<activity
android:name=".ui.MainActivity"
android:label="@string/app_name"
android:launchMode="singleTask"
android:windowSoftInputMode="stateAlwaysHidden|adjustPan" >
<!--Main launcher.-->
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
问题是,onClick 方法正在触发(我可以看到吐司),但其他行对 EditText (mNoteEditText) 没有影响。
谢谢。
所以这是您问题的最佳解决方案。
像这样声明您的清单文件-
<activity
android:name=".ui.MainActivity"
android:label="@string/app_name"
android:launchMode="singleTask"
android:windowSoftInputMode="stateHidden|adjustPan" >
<!--Main launcher.-->
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
在你的 xml 中这样定义 editText
<EditText
android:id="@+id/notepad"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="0.5"
android:background="@android:color/transparent"
android:textSize="@dimen/font_large"
android:textStyle="normal"
android:textColor="@color/appPrimaryText"
android:textColorHint="@color/appAccentColour"
android:gravity="top"
android:cursorVisible="false"
android:scrollbars="vertical" />
在您的主要活动中,像这样编辑 protected void onCreate(Bundle savedInstanceState) 方法-
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mNoteEditText = (EditText) findViewById(R.id.notepad);
mNoteEditText.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (view.getId() == mNoteEditText.getId())
{
mNoteEditText.setCursorVisible(true);
}
}
});
}
就是这样:)
我有一个带有一些 EditText 的 activity,我希望其中一个 EditText 具有以下行为:在 activity 启动时,EditText 填充了一些文本。它不应该显示光标,没有焦点并且不显示键盘(这样用户就可以阅读文本并上下滚动)。然后当用户 clicks/touches EditText 时,它将获得焦点、显示光标和显示键盘(以便用户可以开始编辑)。
启动时的行为正常,但当用户单击 EditText 时我无法使 "start editing" 行为起作用。
这是我的代码:
activity_main.xml: ...
...
<EditText
android:id="@+id/notepad"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="0.5"
android:background="@android:color/transparent"
android:textSize="@dimen/font_large"
android:textStyle="normal"
android:textColor="@color/appPrimaryText"
android:textColorHint="@color/appAccentColour"
android:gravity="top"
android:scrollbars="vertical" />
...
<View
android:layout_width="match_parent"
android:layout_height="@dimen/activity_margin"></View>
</LinearLayout>
MainActivity.java:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mNoteEditText = (EditText) findViewById(R.id.notepad);
final MainActivity mainActivity = this;
mNoteEditText.setFocusable(false);
mNoteEditText.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showToastMessage("here", false);
mNoteEditText.setFocusable(true);
mNoteEditText.requestFocus();
mNoteEditText.setCursorVisible(true);
showKeyboard(mNoteEditText);
}
});
}
public void showKeyboard(EditText editText) {
InputMethodManager inputMethodManager =
(InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE);
inputMethodManager.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);
}
activity 的清单条目是:
<activity
android:name=".ui.MainActivity"
android:label="@string/app_name"
android:launchMode="singleTask"
android:windowSoftInputMode="stateAlwaysHidden|adjustPan" >
<!--Main launcher.-->
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
问题是,onClick 方法正在触发(我可以看到吐司),但其他行对 EditText (mNoteEditText) 没有影响。
谢谢。
所以这是您问题的最佳解决方案。 像这样声明您的清单文件-
<activity
android:name=".ui.MainActivity"
android:label="@string/app_name"
android:launchMode="singleTask"
android:windowSoftInputMode="stateHidden|adjustPan" >
<!--Main launcher.-->
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
在你的 xml 中这样定义 editText
<EditText
android:id="@+id/notepad"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="0.5"
android:background="@android:color/transparent"
android:textSize="@dimen/font_large"
android:textStyle="normal"
android:textColor="@color/appPrimaryText"
android:textColorHint="@color/appAccentColour"
android:gravity="top"
android:cursorVisible="false"
android:scrollbars="vertical" />
在您的主要活动中,像这样编辑 protected void onCreate(Bundle savedInstanceState) 方法-
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mNoteEditText = (EditText) findViewById(R.id.notepad);
mNoteEditText.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (view.getId() == mNoteEditText.getId())
{
mNoteEditText.setCursorVisible(true);
}
}
});
}
就是这样:)