当前位置: 首页 > 知识库问答 >
问题:

Android避免键盘覆盖以编程方式编辑文本

陈兴朝
2023-03-14

我已经编写了以下常规的、每次都可用的函数来显示和关闭键盘:

|==|以编程方式显示和关闭键盘:

InputMethodManager iptKeybodMgrVar;

void keybodDspFnc(EditText txtEdtVyuVar)
{
    txtEdtVyuVar.requestFocus();
    if (iptKeybodMgrVar == null)
    {
        iptKeybodMgrVar = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    }
    iptKeybodMgrVar.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);
}

void keybodDsmFnc(EditText txtEdtVyuVar)
{
    iptKeybodMgrVar.hideSoftInputFromWindow(txtEdtVyuVar.getWindowToken(), 0);
}

但问题是,当编辑文本位于键盘下方时,活动不会向上移动。仅当用户开始键入时,它才会移动。

那么,一旦键盘出现,我如何使它向上移动呢?

我浏览了下面的所有链接,没有任何帮助:

Android:如何防止软键盘将我的视图向上推?

adjustPan不阻止键盘覆盖编辑文本

Android:软键盘覆盖编辑文本(adjustresize或adjustpan不起作用)

https://readyandroid . WordPress . com/Android-soft-keyboard-covers-edit text-field-over scroll-to-soft-keyboard/

我试过了,但没有工作:

android:windowSoftInputMode="adjustPan|stateAlwaysHidden" 

android:windowSoftInputMode="adjustResize|stateAlwaysHidden" 

android:windowSoftInputMode="adjustResize|adjustPan" 

还尝试了以下代码:

(所以,不是:)显示软键盘时向上移动布局?

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);

//This Code brings up the keyboard at starting of the activity and pushes all Edit Text up. So not useful 
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE|
            WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);

我可以添加ScrollView,但它似乎只是一个解决方法,似乎不是一个解决方案。

感觉应该有一个类似于设置InputMethodManager的编程解决方案。

共有2个答案

计寒
2023-03-14

根布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:id="@+id/root"
android:layout_height="match_parent">

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    <!--extra views-->


    <!--add below layout programmatically-->
    <!--<include layout="@layout/layout_dynamic"/>-->


    </ScrollView>
</RelativeLayout>

动态布局

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/dynamicLinearLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">

<EditText
    android:id="@+id/editText"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:inputType="text" />

</LinearLayout>

动态添加视图(无需指定行为)

private void addEditText(){
    RelativeLayout mRootLayout = (RelativeLayout) findViewById(R.id.root);

    LayoutInflater inflater = LayoutInflater.from(mActivity);
    View newView = inflater.inflate(R.layout.layout_dynamic,mRootLayout);
    EditText editText = (EditText) newView.findViewById(R.id.editText);

    mRootLayout.addView(newView);


}

清单文件

 <activity
        android:name=".MainActivity"
        android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
        android:windowSoftInputMode="adjustPan"/>
戈建白
2023-03-14

您需要在LinearLayout中包装EditText,然后使用ScrollView包装它。如果您是通过代码实现的,这有点困难,所以我的建议是更改您的xml布局。

 类似资料:
  • 问题内容: 首先,我已经看到了该线程。我尝试了那里给出的可接受的方法。 我的应用程序中有两个屏幕。 第一个有2个EditText,一个是用户名,另一个是密码 第二个有一个ListView和一个EditText-过滤listView 在我的第一个屏幕中,我希望用户名EditText专注于启动,并且Keyboard应该可见。这是我的实现(通过删除不必要的/不相关的代码进行简化)。 app_login.

  • Android:show软键盘在点击布局底部实现的特定Edittext后自动覆盖Edittext字段的一半。当请求焦点在EditText软键盘上打开时,它将向上移动布局,但会覆盖EditText字段的一半。

  • 问题内容: 我有一个多层PSD,其中一个特定的层是非光栅化文本。我试图从bash / perl / python / whatever- else程序中找出一种可行的方法: 加载PSD 编辑所述图层中的文本 展平图像中的所有图层 另存为Web友好格式,如PNG或JPG 我立刻想到了ImageMagick,但是我认为我无法通过IM编辑文本层。如果我可以通过其他编程方式完成前两个步骤,则可以始终使用I

  • 问题内容: 我有从外部配置Web服务中获取的jdbc属性文件。在spring启动中,为了设置mysql属性,将这些属性添加到application.properties很容易: 如何在我的应用中以编程方式覆盖这些内容? Spring-batch道具也是如此: 问题答案: 你可以在对ApplicationEnvironmentPrepared事件作出反应的生命周期侦听器中添加其他属性源。 类似于以下

  • 编辑#2:因为它看起来像一个bug,我已经在javaFx jira中发布了一个bug报告。您必须拥有一个帐户才能访问该问题。如果有新的信息,我会及时更新这篇文章。 原始帖子:我有一个简单的UI,带有一个按钮和一个树状视图。如果按钮被按下,应该会有一个新的项目添加到树视图。此项一出现在树中就应可编辑。 我使用的CellFactory是JavaFXAPI的一部分。 如果我看看api-留档(TreeVi

  • 你知道有什么解决办法吗?如果可能的话,我不想使用第三方库。