2016-08-14 1 views
1

Ich habe eine Android-App, in C# mit Xamarin geschrieben. Ich habe die App auf ein LinearLayout mit einem TextView und einem Google AdMod AdView für eine Banneranzeige reduziert.Hide Soft-Tastatur auf App fortsetzen

Ich möchte nicht, dass die Soft-Tastatur in der App angezeigt wird - sie ist nicht erforderlich. Wenn ich die App starte, erscheinen das TextView und das Banner Add. Wenn ich dann zu einer anderen App wechsle und dann zur ersten App zurückwechsle, erscheint die Soft-Tastatur, sobald die erste App fortgesetzt wird. Dies geschieht nur, wenn das AdView vorhanden ist. Wenn ich das AdView von der App entferne, wird die Soft-Tastatur nicht angezeigt.

Die Tastatur verfängt sich nicht, wenn die App zum ersten Mal gestartet wird und AdView vorhanden ist - nur wenn die App pausiert und fortgesetzt wird.

Ich habe folgende onResume Überschreibung:

protected override void OnResume() 
{ 
    base.OnResume(); 
    InputMethodManager im = (InputMethodManager)GetSystemService(Context.InputMethodService); 
    im.HideSoftInputFromWindow(Window.DecorView.WindowToken, Android.Views.InputMethods.HideSoftInputFlags.None); 
}         

aber die Tastatur auf Wiederaufnahme erscheint nach wie vor, wenn ich die AdView enthalten.

im.HideSoftInputFromWindow(adView.WindowToken, Android.Views.InputMethods.HideSoftInputFlags.None); 

aber das hat auch nicht geholfen: speziell

Ich habe versucht, die Tastatur in onResume für die AdView versteckt.

Ich habe jeden Vorschlag ausprobiert, den ich in vielen, vielen anderen Stackoverflow-Fragen finden konnte. Ich bin in der Lage zu verhindern, dass die Tastatur in jedem Fall auftaucht, außer wenn die App fortgesetzt wird, wenn AdView vorhanden ist.

Ich bin ratlos. Irgendwelche Ideen?

Mehr Details ....

Zuerst wird eine Korrektur. Ich habe einen EditText auf dem LinearLayout, kein TextView. Ich möchte nicht die Soft-Tastatur, aber ich möchte, dass der EditText editierbar ist (in der Vollversion der App stelle ich Schaltflächen zum Hinzufügen/Löschen/Ändern von Text im EditText bereit).

Ich habe die App auf eine einzelne LinearLayour reduziert, die einen EditText und ein AdView enthält. Wenn ich eine Anzeige in AdView einlege und die App starte, zu einer anderen App wechsle und dann zurückwechsle, erscheint die Soft-Tastatur. Ich will das nicht. Wenn ich jedoch keine Anzeige in AdView lade (aber AdView immer noch in der axml-Datei), dann renne und wechsle usw., es erscheint keine Soft-Tastatur.

Quelle ist wie folgt:

AndroidMainifest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="App1.App1" android:versionCode="1" android:versionName="1.0"> 
    <uses-sdk android:minSdkVersion="16" android:targetSdkVersion="21" /> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
    <application android:label="App1"> 
     <meta-data android:name="com.google.android.gms.version" 
       android:value="@integer/google_play_services_version" /> 
     <activity android:name="com.google.android.gms.ads.AdActivity" 
       android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" 
       android:theme="@android:style/Theme.Translucent" 
       android:windowSoftInputMode="stateAlwaysHidden" /> 
    </application> 
</manifest> 

Main.axml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:ads="http://schemas.android.com/apk/res-auto" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/layout"> 

    <EditText xmlns:tools="http://schemas.android.com/tools" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/editText" /> 

    <com.google.android.gms.ads.AdView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/adView" 
    ads:adSize="SMART_BANNER" 
    ads:adUnitId="ca-app-pub-3940256099942544/6300978111"> 
    </com.google.android.gms.ads.AdView> 

</LinearLayout> 

MainActivity.cs:

using Android.App; 
using Android.Content; 
using Android.Views; 
using Android.Views.InputMethods; 
using Android.OS; 
using Android.Widget; 
using Android.Gms.Ads; 

namespace App1 
{ 
    [Activity(Label = "App1", MainLauncher = true, Icon = "@drawable/icon")] 
    public class MainActivity : Activity 
    { 
     protected override void OnCreate(Bundle bundle) 
     { 
      base.OnCreate(bundle); 

      SetContentView(Resource.Layout.Main); 

      AdView adView = FindViewById<AdView>(Resource.Id.adView); 
      var requestbuilder = new AdRequest.Builder(); 
      adView.LoadAd(requestbuilder.Build()); 
     } 


     protected override void OnResume() 
     { 
      base.OnResume(); 

      InputMethodManager im = (InputMethodManager)GetSystemService(Context.InputMethodService); 

      im.HideSoftInputFromWindow(Window.DecorView.WindowToken, Android.Views.InputMethods.HideSoftInputFlags.None); 

      LinearLayout layout = FindViewById<LinearLayout>(Resource.Id.layout); 
      im.HideSoftInputFromWindow(layout.WindowToken, Android.Views.InputMethods.HideSoftInputFlags.None); 

      EditText editText = FindViewById<EditText>(Resource.Id.editText); 
      im.HideSoftInputFromWindow(editText.WindowToken, Android.Views.InputMethods.HideSoftInputFlags.None); 

      AdView adView = FindViewById<AdView>(Resource.Id.adView); 
      im.HideSoftInputFromWindow(adView.WindowToken, Android.Views.InputMethods.HideSoftInputFlags.None); 

     } 
    } 
} 

Der Code, wie oben gezeigt, demonstriert meinen Profi bluten. Stellen Sie die App auf einem Telefon bereit, führen Sie die App aus, wechseln Sie zu einer anderen App, und wechseln Sie dann erneut, und die Soft-Tastatur erscheint beim Fortsetzen der ersten App. Aber ... kommentieren Sie die folgende Codezeile in MainActivity.cs out:

adView.LoadAd(requestbuilder.Build()); 

und wiederholen Sie den deploy etc., und die Soft-Tastatur nicht eingeblendet.

Wie gesagt, ich bin ratlos. Ich habe versucht, einen Bearbeitungshandler für focuschange zum EditText hinzuzufügen, um die Tastatur herunterzufahren, aber soweit ich feststellen kann, wird das nur aufgerufen, wenn der EditText den Fokus verliert.

Antwort

0

Das Problem ist die EditText, es wird Autofokus, wenn Aktivität erstellt wird. Um dieses Standardverhalten zu entfernen, fügen Sie diese zwei Zeilen zu Ihrem Root-Element hinzu.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:ads="http://schemas.android.com/apk/res-auto" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/layout" 
    android:descendantFocusability="beforeDescendants" 
    android:focusableInTouchMode="true"> 
+0

Das funktioniert! Vielen Dank. Ich habe nur eine weitere Anforderung ... Ich möchte nicht, dass die Tastatur erscheint, wenn ich den editText berühre, aber ich möchte das Touch-Ereignis behandeln. Es wird Text im editText geben und ich möchte ihn ändern können, also möchte ich, dass der Cursor auf Berührung reagiert, aber ich möchte dedizierte Tasten für die Bearbeitung verwenden, nicht die Soft-Tastatur. Irgendwelche Ideen? – JeffR

+0

Danke noch eine ganz andere Frage. Ich empfehle Ihnen, eine neue Frage dafür zu öffnen. Ich bin froh, dass ich helfen kann. Bitte markiere meine Antwort als korrekt. Danke. – jzeferino

+0

Danke. Als Antwort markiert. Neue Frage hier http://stackoverflow.com/questions/38956548/hide-soft-keyboard-for-edittext-focus-touch – JeffR

Verwandte Themen