2012-03-18 51 views
8

我想打开软键盘上的活动开始时,我发现机器人:windowSoftInputMode =“stateVisible”不工作

android:windowSoftInputMode="stateVisible" 

不起作用。

为了确保,我创建了一个新的项目(默认的“Hello world”),并做了以下内容:

  1. 添加windowSoftInputMode到清单。
  2. 后没有工作,我添加了一个EditView中字段的布局
  3. 后没有工作,我加

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE) 到的onCreate程序。

我编译它与Android2.3.3并试图运行它在我的Galaxy S2设备和Android4模拟器 仍然 - 没有键盘。

我的清单文件:

<?xml version="1.0" encoding="utf-8"?> 

<uses-sdk android:minSdkVersion="9" /> 

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name"> 
    <activity 
     android:name=".HelloworldActivity" 
     android:label="@string/app_name" 
     android:windowSoftInputMode="stateVisible"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
</application> 

我main.xml中的布局:

<?xml version="1.0" encoding="utf-8"?> 

<TextView 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/hello" /> 

<EditText 
    android:id="@+id/editText1" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" > 

    <requestFocus /> 

</EditText> 

我的代码:

public class HelloworldActivity extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); 

    } 
} 
+0

我认为'android:windowSoftInputMode'是'activity'元素/标签属性。 – Deucalion 2012-03-18 17:37:05

+0

你是对的 - 我改变了。仍然没有键盘。 – 2012-03-19 07:46:08

+0

你做了什么?它最终解决了吗? – Kenji 2017-12-10 13:24:39

回答

2

你使用默认的安卓键盘吗?如果你这样做,尝试在不同的设备上,我知道它有一些问题

+0

你说得对。在我的设备上安装外部键盘后,我的默认KB从设备设置中消失了。显然这是一个已知的问题,它也影响了这一点。我使用了不同的设备和它的工作。我仍然不知道为什么模拟器不显示KB。 – 2012-03-26 08:19:04

1

因为我发现here,您可以显示键盘活动时通过执行以下操作启动:

EditText editText = (EditText) findViewById(R.id.editText1); 
    InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
    mgr.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT); 

我改变了自己的示例代码有你的EditText's ID,所以应该可以工作

0

你可以f orce首先关注EditText通过运行查看:

final EditText edit = (EditText) findViewById(R.id.editText1); 
edit.post(new Runnable() { 
    @Override 
    public void run() { 
     edit.requestFocus(); 
    } 
}); 

这应该会打开活动启动时的键盘。

+0

没有必要创建不必要的线程。请参阅我的解答答案。 – 2012-03-26 04:29:27

+0

后不会创建一个新的线程,它添加一个可运行的视图的队列,这是非常有效的。 我仍然会用我的解决方案,似乎对我更优雅。 – marmor 2012-04-01 16:07:00

+0

是的。它也可以正常工作。享受编码。 – 2012-04-02 04:20:01

3

它简单的事情。 我已经做到了,它可以按照您的要求工作。

  1. 不要对清单做任何事情,请在创建新项目时保持原样。

  2. 现在定义输入管理器。现在

    public static InputMethodManager imm; 
    imm = (InputMethodManager)this.getSystemService(Context.INPUT_METHOD_SERVICE); 
    
  3. ,这里的薪水的EditText是我的EditText,我表示对活动的开始键盘。

    salaryEditText.setHint("select Salary/Wage"); 
    
    salaryEditText.setFilters(new InputFilter[] {new DecimalDigitsInputFilter(2)}); // Ignore this line 
    
    if(!(imm==null)) 
    imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,1); 
    

这将帮助你以显示键盘,而活动开始。

,收于活动结束键盘请参见下面的代码:

白色该代码同时完成的活动。

imm.hideSoftInputFromWindow(salaryEditText.getWindowToken(), 0); 

希望它能解决您的问题。如果没有,然后让我知道。

享受。 :)

+0

我有同样的问题,这不起作用。 – Kenji 2017-12-10 13:24:02

+0

@kenji如果这个答案不适合你,我建议请按照接受的答案。谢谢。 – 2017-12-11 08:51:15