2017-04-30 14 views
1

私は1つのテキストの編集、5つのボタンとWebviewを持っています。 Webview URLを入力してテキストを編集してURLを入力し、Goボタンを押すか、ソフトキーボードのEnterキーを押します。 私は3つの問題があります。Webviewは編集テキストからURLを削除すると自動的にフォーカスを取得します

1-WebViewは「www.google.com」などのWebサイトをロードしますが、ソフトキーボードは表示されません。私は他のブラウザのようにそれを隠したいです。

2 - ユーザーが特定のURLを開き、別のURLを開くためにテキストを編集しようとすると、webviewはその不完全なURLを読み込み、すべての文字が削除されると自動的にフォーカスを取得します。たとえば、ユーザーが「www.google.com」を読み込んだ後、URLから末尾を削除しようとすると、「m」を削除すると、webviewは「www.google.co」を読み込み、テキストのフォーカスを外し、webviewからフォーカスを奪ったユーザーはテキストを編集してURLを削除する必要がありますが、削除するたびに読み込みを試みます。ユーザーがGoボタンをタップするか、ソフトキーボードのEnterキーを押した場合にのみURLを読み込むためにWebviewが必要です。

更新(第三の問題点を追加するのを忘れ、ここにある)

3-どこでするときのWebView CanGoBackとCanGoForward私は起動時にfalseに戻る]ボタンや[進む]ボタンの可視性を設定したいので、チェックして、有効にすることができますこれらの2つのボタンはCanGoBackとCanGoForwardです。これらの条件を確認するコードはどこに置くべきですか?

私はあなたが私が何を言おうとしているのか理解できることを願っています。私の貧しい英語のために申し訳ありません。

ここに私のXMLコードです。

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/activity_main" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:weightSum="13" 
    tools:context="com.hbss.chatapp.rashidfaheem.hybridsoftwaresolutions.rashidfaheem.youseebrowser.MainActivity"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1" 
     android:weightSum="4" 
     > 


     <EditText 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:id="@+id/etUrl" 
      android:layout_weight="3" 
      /> 
     <Button 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:text="GO" 
      android:id="@+id/btnGo" 
      /> 


    </LinearLayout> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1" 
     android:weightSum="4" 
     > 

     <Button 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:text="Back" 
      android:id="@+id/btnBack" 
      /> 

     <Button 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:text="Forward" 
      android:id="@+id/btnForward" 
      /> 

     <Button 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:text="Clear" 
      android:id="@+id/btnClear" 
      /> 

     <Button 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:text="Reload" 
      android:id="@+id/btnReload" 
      /> 


    </LinearLayout> 
<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:layout_weight="11" 
    > 
    <WebView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/wb" 
     /> 


</LinearLayout> 


</LinearLayout> 

ここは私のJavaコードです。

public class MainActivity extends AppCompatActivity implements View.OnClickListener { 
EditText etUrl; 
Button btnGo, btnBack, btnForward, btnClear, btnReload; 
WebView wb; 
String url; 
View v; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    wb = (WebView) findViewById(R.id.wb); 
    wb.getSettings().setJavaScriptEnabled(true); 
    wb.getSettings().setUseWideViewPort(true); 
    wb.getSettings().setLoadWithOverviewMode(true); 
    wb.setWebViewClient(new ourClient()); 



    etUrl = (EditText) findViewById(R.id.etUrl); 
    btnGo = (Button) findViewById(R.id.btnGo); 
    btnBack = (Button) findViewById(R.id.btnBack); 
    btnForward = (Button) findViewById(R.id.btnForward); 
    btnClear = (Button) findViewById(R.id.btnClear); 
    btnReload = (Button) findViewById(R.id.btnReload); 

    btnGo.setOnClickListener(this); 
    btnReload.setOnClickListener(this); 
    btnBack.setOnClickListener(this); 
    btnForward.setOnClickListener(this); 
    btnClear.setOnClickListener(this); 

    etUrl.setOnKeyListener(new View.OnKeyListener() { 
     @Override 
     public boolean onKey(View view, int i, KeyEvent keyEvent) { 
      if (keyEvent.getAction()==KeyEvent.ACTION_DOWN && i==KeyEvent.KEYCODE_ENTER) { 
       return true; 
      } 
      load(); 
      return false; 
     } 
    }); 
} 

@Override 
public void onClick(View v) { 
    switch (v.getId()) { 
     case R.id.btnGo: 
      load(); 
      break; 
     case R.id.btnBack: 
      if (wb.canGoBack()) 
       wb.goBack(); 
      break; 
     case R.id.btnForward: 
      if (wb.canGoForward()) 
       wb.goForward(); 
      break; 
     case R.id.btnReload: 
      wb.reload(); 
      break; 
     case R.id.btnClear: 
      wb.clearHistory(); 
      break; 
    } 
} 

    public void load(){ 
    url = etUrl.getText().toString(); 
    if (!url.startsWith("http://")) { 
     url = "http://" + url; 
    } 
    try { 
     wb.loadUrl(url); 
     wb.requestFocus(); 

    } catch (Exception e) { 
     Toast.makeText(getApplicationContext(), " " + e, Toast.LENGTH_LONG).show(); 
    } 

} 

}

+0

申し訳ありませんが、私は3番目の問題を追加することを忘れて、今私の質問でそれを追加しました。 –

答えて

2

使用キーボードを非表示にするには、この方法:あなたが必要とするあなたの質問について

hideSoftKeyboard(MainActivity.this); 

public static void hideSoftKeyboard(Activity context) { 
    InputMethodManager inputManager = (InputMethodManager) context 
      .getSystemService(Context.INPUT_METHOD_SERVICE); 
    if (inputManager != null) 
     inputManager.hideSoftInputFromWindow(context.getWindow() 
       .getDecorView().getApplicationWindowToken(), 0); 
    context.getWindow().setSoftInputMode(
      WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 

} 

は次のようにあなたのload()方法でそれを呼び出します条件内でメソッドを呼び出す以下のように:あなたの活動のonKeyDownを上書きなどの条件をご確認ください:

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    // Check if the key event was the Back button and if there's history 
    if ((keyCode == KeyEvent.KEYCODE_BACK) && wb.canGoBack()) { 
     wb.goBack(); 
     //show your back button here 
     return true; 
    } 
    // If it wasn't the Back key or there's no web page history, bubble up to the default 
    // system behavior (probably exit the activity) 
    //show other buttons 
    return super.onKeyDown(keyCode, event); 
} 

あなたはあなたのonResume()load()にチェックを追加することができますwebview戻っ機能については

etUrl.setOnKeyListener(new View.OnKeyListener() { 
    @Override 
    public boolean onKey(View view, int i, KeyEvent keyEvent) { 
     if ((keyEvent.getAction()==KeyEvent.ACTION_DOWN) && (i==KeyEvent.KEYCODE_ENTER)){ 
      load(); //add it here 
      return true; 
     } 
     return false; 
    } 
}); 

EDIT

それに応じてボタンも表示してください。

@Override 
protected void onResume() { 
    super.onResume(); 
    if(wb.canGoBack()){ 
     //show back button} 
    else{ 
     //other button 
     } 
} 
+0

Thanx bro。ところで、これら3行のコードをキーボードを隠すのに大丈夫ですか?ビュービュー= this.getCurrentFocus(); InputMethodManager imm =(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); imm。hideSoftInputFromWindow(view.getWindowToken()、0); –

+1

はい...それも動作します.. – rafsanahmad007

+0

本当に感謝の仲間。あなたは私が前に追加したことを忘れた私の3番目の問題に答えることができます、今私の答えを更新しました。 –

関連する問題