android:windowSoftInputMode =“stateVisible”不起作用

时间:2012-03-18 16:34:40

标签: android android-layout android-emulator

我想在Activity开始时打开软键盘,我发现

android:windowSoftInputMode="stateVisible" 

不起作用。

为了确保,我创建了一个新项目(默认" Hello world")并执行了以下操作:

  1. 将windowSoftInputMode添加到清单中。
  2. 在那之后没有工作,我在布局中添加了一个EditView字段
  3. 在那之后没有工作,我添加了
  4. 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);
    
        }
    }
    

4 个答案:

答案 0 :(得分:3)

简单的事情。 我已经完成了它,它可以满足您的要求。

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

  2. 现在定义inputmanager。

    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);
    
  4. 这将有助于您在活动开始时显示键盘。

    要在活动结束时关闭键盘,请参阅以下代码:

    在完成活动时将此代码设为白色。

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

    希望它能解决您的问题。如果没有,请告诉我。

    享受。 :)

答案 1 :(得分:2)

你使用默认的android键盘吗?如果你这样做,请在其他设备上试用,我知道它有一些问题

答案 2 :(得分:1)

当我找到here时,您可以在活动开始时通过执行以下操作来显示键盘:

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

我更改了他们的示例代码以获得EditText的ID,因此应该可以使用

答案 3 :(得分:0)

您可以通过运行:

强制首先关注EditText视图
final EditText edit = (EditText) findViewById(R.id.editText1);
edit.post(new Runnable() {
    @Override
    public void run() {
        edit.requestFocus();
    }
});

这应该在活动开始时打开键盘。