ChatGPT解决这个技术问题 Extra ChatGPT

Activity 启动时显示软键盘

我有 2 个活动,A 和 B。当 A 启动时,它会检查条件,如果为真,它会调用 startActivityForResult() 来启动 B。B 只接受文本输入,因此软键盘在 B 时自动弹出是有意义的开始。当活动开始时,EditText 已经有了焦点并准备好输入。

问题是键盘永远不会出现,即使在清单中为 B 的 <activity> 标记下设置了 windowSoftInputMode="stateAlwaysVisible"。我也尝试将值设置为 stateVisible。由于它不会自动显示,我必须点击 EditText 以使其显示。

任何人都知道解决方案可能是什么?

(在黑暗中拍摄,但是)您是否尝试过 requestFocus 文本框?

L
Leo

最适合我的是在 Android Manifest 中添加活动 B

android:windowSoftInputMode="stateVisible"

希望对你也有帮助。


我应该注意到,到目前为止,这对于运行 2.2 的 Nexus One 来说效果很好,但一些摩托罗拉设备(例如 Milestone 的 2.1)似乎忽略了这一点。
谢谢,以编程方式检查 stackoverflow.com/questions/5593053/…
使用 stateVisible 会导致键盘在设备方向更改时重新出现。如果不需要此行为,则 stateVisible 不是解决方案。
对于像我这样的新手:你必须在
这种方法的问题是它不能使用中央库传播到许多应用程序。您需要在所有清单文件中重复此行为。程序化解决方案也解决了这个问题。
U
Uncaught Exception

最简单的解决方案:放

android:windowSoftInputMode = "stateVisible" 

在 AndroidManifest.xml 的 Activity 部分


对于像我这样的新手:你必须在
s
synic

如果 EditText 上的 requestFocus 没有显示它,也许可以这样做:

InputMethodManager imm = (InputMethodManager)getSystemService(
    Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(mEditText, 0);

查看 here 了解更多信息。


只要您没有在其他任何地方(例如在清单或代码中)指定不同的软输入状态,这应该可以工作。即 this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
P
Paul

对我来说,只使用了这个解决方案:为该活动添加清单:

android:windowSoftInputMode="stateVisible|adjustPan"

它适用于带有硬件键盘的设备吗?我很难在硬件键盘设备(即 2.2 设备)中工作
对于像我这样的新手:你必须在
a
abc

我有两种方法。

方法 1. 在 OnCreate 方法中使用如下代码

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

除非您单击,否则它将防止弹出键盘。

或者

方法2 您可以通过在xml中使用“requestfocus”将焦点移到TextView等其他视图上。

<TextView
            android:id="@+id/year_birth_day"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:text="1991">            
           <requestFocus />
           </TextView>

方法3(我认为应该可以避免)在清单中使用以下代码-

android:windowSoftInputMode="stateVisible"

使用 是唯一对我有用的东西。谢谢
w
whlk

尝试延迟显示键盘。与此类似的东西:

public void onResume() {
    super.onResume();

    TimerTask tt = new TimerTask() {

        @Override
        public void run() {
            InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.showSoftInput(yourTextBox, InputMethodManager.SHOW_IMPLICIT);
        }
    };

    final Timer timer = new Timer();
    timer.schedule(tt, 200);
}

定时器任务?为了什么?
@busylee,您可以使用处理程序或任何其他方法在您选择的延迟中执行某些操作。这只是一个例子。
没有理由使用延迟
K
Kishan Solanki

需要高度重视!

android:windowSoftInputMode="stateVisible|adjustPan" 仅此一项无法在活动开始时显示键盘。

您还需要明确地将其添加到您的课程中

editTextXYZ.requestFocus()
        val imm: InputMethodManager =
            getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
        imm.showSoftInput(editTextXYZ, InputMethodManager.SHOW_IMPLICIT)

C
Chad Hedgcock

如果您使用的是模拟器,则必须关闭硬键盘才能显示软键盘。


P
Paul Roub

文件:AndroidManifest.xml

<activity android:name=".MainActivity">

添加以下属性:

android:windowSoftInputMode="stateVisible"

这对我有用。


A
Ashwini

在 setContentView 之后粘贴

this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);