react-native android 怎样可以实现既能保证屏蔽掉软键盘,又能使光标正常显示?

网上找了一堆方法, 设置windowSoftInputMode什么的, 都实现不了, 下面链接说的比较靠谱(因为我也是做的PDA), 可是, 没用

csdn的一篇文章

这是我的MainApplication.java代码

package com.pda;

import android.app.Application;
import android.util.Log;
import android.widget.EditText;
import java.lang.reflect.Method;

import com.facebook.react.ReactApplication;
import com.zphhhhh.speech.SpeechPackage;
import im.shimo.react.cookie.CookieManagerPackage;
import com.facebook.react.ReactNativeHost;
import com.facebook.react.ReactPackage;
import com.facebook.react.shell.MainReactPackage;
import com.facebook.soloader.SoLoader;
import com.facebook.stetho.Stetho;
import okhttp3.OkHttpClient;
import com.facebook.stetho.okhttp3.StethoInterceptor;

import java.util.Arrays;
import java.util.List;

public class MainApplication extends Application implements ReactApplication {

    private EditText editText;

    private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {
    @Override
    public boolean getUseDeveloperSupport() {
      return BuildConfig.DEBUG;
    }

    @Override
    protected List<ReactPackage> getPackages() {
      return Arrays.<ReactPackage>asList(
          new MainReactPackage(),
            new SpeechPackage(),
              new CookieManagerPackage()
      );
    }

    @Override
    protected String getJSMainModuleName() {
      return "index";
    }
  };

  @Override
  public ReactNativeHost getReactNativeHost() {
    return mReactNativeHost;
  }

  @Override
  public void onCreate() {
      super.onCreate();
      SoLoader.init(this, /* native exopackage */ false);
      Stetho.initializeWithDefaults(this);
      initOkHttp();
      disableShowSoftInput();
  }

    private void initOkHttp() {
      new OkHttpClient.Builder()
      .addNetworkInterceptor(new StethoInterceptor())
      .build();
    }

    /**
     * 设置展示光标弹不弹出系统键盘
     */
    private void disableShowSoftInput() {
        Class<EditText> cls = EditText.class;
        Method method;
        try {
            method = cls.getMethod("setShowSoftInputOnFocus", boolean.class);
            method.setAccessible(true);
            method.invoke(editText, false);
        } catch (Exception e) {
            Log.e("setShowSoftInputOnFocus", e.toString());
        }
        try {
            method = cls.getMethod("setSoftInputShownOnFocus", boolean.class);
            method.setAccessible(true);
            method.invoke(editText, false);
        } catch (Exception e) {
            Log.e("SoftInputShownOnFocus", e.toString());
        }
    }

}

AndroidManifest.xml代码

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.pda"
    android:versionCode="1"
    android:versionName="1.0">

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

    <uses-sdk
        android:minSdkVersion="16"
        android:targetSdkVersion="22" />

    <application
      android:name=".MainApplication"
      android:allowBackup="true"
      android:label="@string/app_name"
      android:icon="@mipmap/ic_launcher"
      android:theme="@style/AppTheme">
      <activity
        android:name=".MainActivity"
        android:label="@string/app_name"
        android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
        android:windowSoftInputMode="adjustResize">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
      </activity>
      <activity android:name="com.facebook.react.devsupport.DevSettingsActivity" />
    </application>

</manifest>

麻烦知道的大哥说声, 感谢万分!!!

阅读 5k
3 个回答
新手上路,请多包涵

楼主解决了吗

新手上路,请多包涵
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题