当前位置: 首页 > 面试题库 >

带有自动换行功能的Android EditText,但无固定回报

盖泽宇
2023-03-14
问题内容

如果在EditText小部件上设置SingleLine =
true,则会得到单行编辑控件,该控件不允许用户插入硬返回(单击Enter键将移至下一个字段,而不是插入新行)。如果我未设置SingleLine =
true,则用户可以插入硬返回。

如果设置layout_height =“
wrap_content”,则EditText控件将垂直增长以显示所有文本。但是,只有在SingleLine未设置为true时,才执行此操作。

因此,我的问题是,是否有可能在不让用户输入强行换行符的情况下进行自动换行和垂直调整大小?我想我可以捕获Enter键,但是随后我还必须捕获其他方法,使它们可能在那里(复制/粘贴,不知道还有什么?)。是否有一种简单的方法就可以正确组合属性?

与单行编辑控件的水平滚动相比,我更喜欢自动换行,用户可以看到所有文本,但是我真的不希望他们认为他们可以输入多行文本(我也不想来支持它)。我想如果必须将数据保存到数据库中时,我可能会将硬收益转换为空格(我将这些数据同步到PC上的旧版应用程序无法处理硬收益)。


问题答案:

我也一直在寻找可以做到这一点的东西。我发现的唯一解决方案是按如下方式扩展EditText:

package com.kylemilligan.test;

import android.content.Context;
import android.util.AttributeSet;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputConnection;
import android.widget.EditText;

public class NoNewlineEditText extends EditText
{

    public NoNewlineEditText(Context context) {
        super(context);
    }

    public NoNewlineEditText(Context context, AttributeSet attributeSet) {
        super(context, attributeSet);
    }

    @Override
    public InputConnection onCreateInputConnection(EditorInfo outAttrs)
    {
        InputConnection connection = super.onCreateInputConnection(outAttrs);
        int imeActions = outAttrs.imeOptions & EditorInfo.IME_MASK_ACTION;
        if ((imeActions & EditorInfo.IME_ACTION_DONE) != 0)
        {
            // clear the existing action
            outAttrs.imeOptions ^= imeActions;
            // set the DONE action
            outAttrs.imeOptions |= EditorInfo.IME_ACTION_DONE;
        }
        if ((outAttrs.imeOptions & EditorInfo.IME_FLAG_NO_ENTER_ACTION) != 0)
        {
            outAttrs.imeOptions &= ~EditorInfo.IME_FLAG_NO_ENTER_ACTION;
        }
        return connection;
    }
}

然后在XML中使用类似:

        <com.kylemilligan.test.NoNewlineEditText
            android:id="@+id/noNewLineText"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="top|left"
            android:imeOptions="actionDone"
            android:minLines="5" />

希望这可以帮助!



 类似资料:
  • 问题内容: 上周,我了解到可以通过编写函数将类包含在您的项目中。然后我了解到,使用自动加载器不仅是一种技术,而且是一种模式。 现在,我在项目中使用了自动加载器,并且发现它非常有用。我想知道是否有可能用函数做同样的事情。忘记包含正确的PHP文件以及其内部的功能可能对您很有用。 那么,是否可以创建函数自动加载器? 问题答案: 没有用于功能的功能自动加载器。您有四个可行的解决方案: 将所有函数包装到命名

  • 可以像 FFI 函数那样导入它们,使用特殊的rust-intrinsicABI。例如,如果在一个独立的上下文,但是想要能在类型间transmute,并想进行高效的指针计算,你可以声明函数: #![feature(intrinsics)] # fn main() {} extern "rust-intrinsic" { fn transmute<T, U>(x: T) -> U;

  • 问题内容: 我需要在网页上显示一个大表,并且需要防止第一列和第一行滚动。 我想动态设置此表的垂直大小(在某些静态大小的页眉/页脚页面内容之间),以使其尽可能高,而不必强制浏览器窗口具有垂直滚动条。 这仅需要在使用所有/任何版本的现代浏览器中工作:html,css,javascript,jquery 重要顺序: 具有许多表单字段,隐藏值,行的javascript折叠等的复杂表,稍后将添加 第一行将有

  • 问题内容: 我在正常( 非ajax )函数中遇到了问题,每个函数中都包含许多 动画 。目前,我只是具有一个between函数,但这并不是完美的,因为没有浏览器/计算机是相同的。 附加说明:它们都有碰撞的单独动画/等。 我不能简单地将一个放在另一个的回调函数中 无论如何在js / jQuery中有: 我知道&,但是这些是针对AJAX的… 我更新的解决方案 jQuery有一个名为$ .timers的暴

  • 问题内容: 我正在尝试使用AJAX将查询发送到Google图书并将结果显示在我的网站上。我正在使用JQuery发送请求并处理响应,如下所示: 当前,如果收到响应,我只是具有警告“成功”的脚本。如果我使用脚本将查询发送到本地页面进行测试,则效果很好。但是,当我按照开发人员API页面上的指示将网址设置为上面列出的Google网址时,我再也看不到该警报。根据Firebug的说法,我会收到应有的响应,并且