【问题标题】:EditText Is Not Visible With Open KeyboardEditText 在打开键盘时不可见
【发布时间】:2016-02-19 02:42:15
【问题描述】:

我有一个全屏活动,背景是全屏 ImageView。我使用gravity:center 在屏幕中间放置了一个EditText。当键盘打开时,我希望 EditText 向上移动,如下图所示,以便整个 EditText 始终可见。我曾尝试使用android:windowSoftInputMode="stateVisible|adjustResize",但问题是我在背景中的图像也被调整了大小,这是不可取的。此外,由于重力设置为居中,这导致 EditText 和键盘之间存在间隙,因此它仍然位于中心。我曾尝试使用 scrollView 但是我不知道如何获取键盘结束的位置,以便我可以将我的 EditText 移动到该位置。我也尝试过adjustPan,但是这没有效果,因为 EditText 的高度为200dp,并且重力设置为中心,因此用户总是开始在 EditText 的中间输入,而该 EditText 仍然可见。

XML

<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

<FrameLayout
    android:id="@+id/camera_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

</FrameLayout>
<ImageView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:visibility="gone"
    android:id="@+id/picturedisplay"/>

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_gravity="center"
        android:layout_height="200dp"
        android:weightSum="100"
        android:visibility="gone"
        android:id="@+id/pic_layout"
        android:orientation="vertical"
        android:background="#9945D199"
        >
        <EditText
            android:layout_width="fill_parent"
            android:layout_height="0dp"
            android:hint="Enter text here..."
            android:textColor="#FFFFFF"
            android:maxLength="250"
            android:gravity="center"
            android:imeOptions="flagNoExtractUi"
            android:id="@+id/pic_textbox"
            android:layout_weight="90"/>
        <TextView
            android:layout_width="40dp"
            android:layout_height="0px"
            android:text="200"
            android:textColor="#FFFFFF"
            android:textStyle="bold"
            android:gravity="center_horizontal"
            android:layout_weight="10"
            android:id="@+id/char_rem_view"
            android:layout_gravity="end"/>
    </LinearLayout>

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/imgClose"
    android:layout_gravity="right|bottom"
    android:text="Flip Cam"
    android:padding="20dp"/>
<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/snap"
    android:text="Capture"
    android:layout_gravity="center|bottom"
    android:padding="20dp"/>
<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Flash"
    android:visibility="visible"
    android:id="@+id/imgOpen"
    android:layout_gravity="left|bottom"
    android:padding="20dp"/>
<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/addText"
    android:layout_gravity="right|bottom"
    android:text="Add Text"
    android:visibility="gone"
    android:padding="20dp"/>
<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/addPic"
    android:text="Add Pic"
    android:visibility="gone"
    android:layout_gravity="center|bottom"
    android:padding="20dp"/>
<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Delete"
    android:id="@+id/delete"
    android:visibility="gone"
    android:layout_gravity="left|bottom"
    android:padding="20dp"/>
<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Save"
    android:id="@+id/save_photo"
    android:visibility="gone"
    android:layout_gravity="right|top"
    android:padding="20dp"/>

【问题讨论】:

  • 你能贴出你的xml代码吗?
  • @Jayanth 我发布了 xml
  • 如果可能的话,将 EditText 放到它自己的 ViewGroup 中,例如 LinearLayout/RelativeLayout 或 FrameLayout。它应该确保编辑框在获得焦点时始终可见。

标签: java android android-edittext android-softkeyboard


【解决方案1】:

将此添加到您的 EditText xml 中,

android:imeOptions="flagNoExtractUi"

我不确定这个方法不适合你的需要,希望你能帮忙:)

【讨论】:

    【解决方案2】:

    打开你的 menifest.xml 找到你的活动并添加这一行

    <activity android:windowSoftInputMode="adjustResize" />
    

    <activity android:windowSoftInputMode="adjustPan" />
    

    您的活动标签应如下所示

    <activity
        android:name="com.my.MainActivity" //Change this to your.package.ActivityName
        android:screenOrientation="portrait"
        android:label="@string/title_activity_main"
        android:windowSoftInputMode="adjustPan" >
    </activity>
    

    <activity
        android:name="com.my.MainActivity"  //Change this to your.package.ActivityName
        android:screenOrientation="portrait"
        android:label="@string/title_activity_main"
        android:windowSoftInputMode="adjustResize" >
    </activity>
    

    更新 1

    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
    
    <FrameLayout
        android:id="@+id/camera_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
    </FrameLayout>
    
    <ImageView
        android:id="@+id/picturedisplay"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:visibility="gone" />
    
    <LinearLayout
        android:id="@+id/pic_layout"
        android:layout_width="fill_parent"
        android:layout_height="200dp"
        android:layout_gravity="center"
        android:background="#9945D199"
        android:gravity="center"
        android:orientation="vertical"
        android:visibility="visible">
    
        <EditText
            android:id="@+id/pic_textbox"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:gravity="bottom|center"
            android:hint="Enter text here..."
            android:maxLength="250"
            android:maxLines="6"
            android:textColor="#FFFFFF" />
    
        <TextView
            android:id="@+id/char_rem_view"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="end"
            android:gravity="center_horizontal"
            android:padding="5dp"
            android:text="200"
            android:textColor="#FFFFFF"
            android:textStyle="bold" />
    </LinearLayout>
    
    <Button
        android:id="@+id/imgClose"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="right|bottom"
        android:padding="20dp"
        android:text="Flip Cam" />
    
    <Button
        android:id="@+id/snap"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center|bottom"
        android:padding="20dp"
        android:text="Capture" />
    
    <Button
        android:id="@+id/imgOpen"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="left|bottom"
        android:padding="20dp"
        android:text="Flash"
        android:visibility="visible" />
    
    <Button
        android:id="@+id/addText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="right|bottom"
        android:padding="20dp"
        android:text="Add Text"
        android:visibility="gone" />
    
    <Button
        android:id="@+id/addPic"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center|bottom"
        android:padding="20dp"
        android:text="Add Pic"
        android:visibility="gone" />
    
    <Button
        android:id="@+id/delete"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="left|bottom"
        android:padding="20dp"
        android:text="Delete"
        android:visibility="gone" />
    
    <Button
        android:id="@+id/save_photo"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="right|top"
        android:padding="20dp"
        android:text="Save"
        android:visibility="gone" />
    
    </FrameLayout>
    

    【讨论】:

    • 我在问题中提到这些都不起作用,因为 adjustResize 会调整 ImageView 中的图像大小,这是不可取的,并且 adjustPan 似乎没有任何作用
    • 哦,对不起,我没有注意到。那么您有必要设置 EditText 的重力=中心吗?
    • 能否请您告诉我如何更改我的代码,以便我可以设置 EditText 的位置,而无需硬编码以 dp 或像素为单位的位置,我希望它与屏幕尺寸相关。通常我会使用 layout_weight 但是框架布局不起作用。这就是我使用gravity=center的原因
    • 尝试使用重力 = 底部到您的 EditText。
    • 你能告诉我你想要的实际布局吗?您的布局中的任何草图图像都隐藏了许多视图
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-05
    • 2020-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多