2012-03-18 43 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