在Android上强制EditText全屏显示

12

我目前正在使用三星Galaxy Tab 2作为我的设备开发应用程序。

我的XML代码如下:

<EditText
    android:id="@+id/analysis_text"
    style="@style/icon_text"
    android:imeOptions="actionDone"
    android:inputType="textMultiLine"
    android:onClick="onBtnClicked"
/>
当此代码执行时,全屏数据输入模式(提取模式)仅在某些情况下会自动触发。
我希望我的用户在编辑此控件中的文本时能够获得完整的数据输入屏幕,无论控件所在的屏幕或位置如何。
这个问题的另一个表述是:如何强制在我的活动中为EditText框强制启用全屏数据输入模式,无论内容是什么?

你尝试过使用以下代码吗?android:layout_width="fill_parent"android:layout_height="fill_parent" - Usman Kurd
谢谢Usman Kurd。不过我的情况略有不同,我有六个这样的框,所以我想在进行数据输入时将它们展开至全屏。 - skv
使用AutoCompleteTextView... - Usama Sarwar
谢谢Usama,我刚刚尝试了你的建议,但它并没有解决我的原始问题,数据输入仍然在不切换到全屏模式的情况下发生。 - skv
有点偏题,但是尝试在EditText获得焦点时打开另一个Activity或Fragment。 - Daksh Agrawal
2个回答

8

我解决了这个问题,不是真正的解决,但找到了一个有效的解决方法。

解决方法是我设计了一个文本编辑器(看起来类似于全屏UI),并在每个EditBox被点击时触发新的UI活动(使用startActivityForResult(),以便完成后将控制权交回给调用活动),并在编辑完成后将文本传回主屏幕。

我还确保那些转移控制的框不会获得焦点,以便它们立即将控制权转移到新的UI。

通过这种方式,我已经能够实现一个取消按钮,现在用户可以在不保存他意外更改的情况下返回。

我开放接受新的想法,但这对我有用。

Activity中的代码:

public void onBtnClicked(View v) {
    EditText current_text_box = (EditText) v;

    Intent intent = new Intent(ObservationActivity.this,
            TexteditorActivity.class);
    intent.putExtra("start_text", current_text_box.getText().toString());
    intent.putExtra("start_position", current_text_box.getSelectionStart());
    startActivityForResult(intent, v.getId());
} 

XML中的代码:

<EditText
    android:id="@+id/observation_text"
    style="@style/icon_text"
    android:focusable="false"
    android:imeOptions="flagNoExtractUi"
    android:inputType="textMultiLine"
    android:onClick="onBtnClicked" >
</EditText>

要创建全屏UI,我使用了代码。你可以使用任何一种代码,例如(http://android-richtexteditor.googlecode.com/)。

2
这是一个非常好的想法,我正处于同样的情况,我已经决定跟随您的脚步 :) 干杯 - Bruce
这真的是一个不错的解决方法。请查看我的问题,并让我知道您是否遇到了这种情况。http://stackoverflow.com/questions/29786797/requestfocus-is-making-the-scrollview-to-jump-even-the-view-is-well-over-the-a - Aung Pyae
面对404错误。请帮忙。 - Daksh Agrawal
@DakshAgrawal 不确定你是否在使用 Android 开发工具或基于 JS 的混合开发。 - skv
1
@DakshAgrawal 很好的应用,不幸的是我无法测试你的应用程序,因为它需要我的手机号码(我不愿意分享),你能详细解释一下问题吗?显然这里的解决方案已经有5年历史了。 - skv
如果您不想在调用方Activity中覆盖onActivityResult,可以使用viewModel作为单例,两个Activities都可以使用。这样,您就可以依赖LiveData来存储EditText的内容。 - lasec0203

0

你可以试试这个

yourEditText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            if(hasFocus){
                yourEditText.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
            }
        }
    });

导入父布局的LayoutParams。您的答案也将很好地工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接