4

我有一个RelativeLayout和一个EditText,它下面有Button。理想情况下,当用户单击EditText并填充多行文本时,RelativeLayout也会随着行数的增加而扩大。然而,我现在的行为是在EditText的第一行填满之后,键盘开始覆盖其下面的Button,并且在EditText之后的3-4行文本之后,Button不在键盘之下。有什么办法可以让我在键入文本的时候,整个布局的尺寸增大,使按钮保持在键盘上方?这里是我的代码:软键盘隐藏多行EditText下面的按钮?

的AndroidManifest.xml:

<activity 
     android:name="<Name of project>.activity.Comments" 
     android:configChanges="orientation|keyboardHidden" 
     android:label="Comments" 
     android:screenOrientation="portrait" 
     android:theme="@style/AppTheme.NoActionBar" 
     android:windowSoftInputMode="stateHidden|adjustResize" /> 

Comments.xml:

<RelativeLayout 
     android:id="@+id/send_message" 
     android:layout_width="match_parent" 
     android:layout_height="90dp" 
     android:layout_margin="4dp" 
     android:layout_alignParentBottom="true"> 

     <EditText 
      android:fontFamily="sans-serif" 
      android:id="@+id/write_comment" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:padding="12dp" 
      android:gravity="left" 
      android:textSize="16sp" 
      android:textColor="@color/black" 
      android:cursorVisible="false" 
      android:textColorHint="@color/material_color_grey_300" 
      android:hint="@string/commentBack" 
      android:background="@drawable/edittext_bg" 
      android:inputType="textMultiLine" 
      android:isScrollContainer="true" 
      android:maxLength="200" 
      android:scrollHorizontally="false" /> 

     <Button 
      android:fontFamily="sans-serif-medium" 
      android:id="@+id/send_comment" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textSize="16sp" 
      android:textColor="@color/colorPrimary" 
      android:layout_marginTop="8dp" 
      android:text="@string/send" 
      android:background="@null" 
      android:layout_below="@id/write_comment" 
      android:layout_alignParentRight="true" 
      android:layout_alignParentBottom="true" 
      android:textAllCaps="false" /> 
    </RelativeLayout> 

我已经尝试添加android:isScrollContainer="true"以为这样就可以创建一个滚动容器的EditText如此这将有助于扩大布局,但似乎没有工作。任何帮助,将不胜感激。谢谢!

编辑:已在整个布局基于以下答案:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.CoordinatorLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" android:fitsSystemWindows="true" 
    android:id="@+id/comments_layout"> 

    <android.support.design.widget.AppBarLayout 
     android:layout_height="wrap_content" 
     android:layout_width="match_parent" 
     android:theme="@style/AppTheme.AppBarOverlay"> 

     <android.support.v7.widget.Toolbar 
      android:id="@+id/comments_appbar" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      android:background="?attr/colorPrimary" 
      app:popupTheme="@style/AppTheme.PopupOverlay" /> 

    </android.support.design.widget.AppBarLayout> 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

     <RelativeLayout 
      android:layout_alignParentTop="true" 
      android:layout_marginTop="?attr/actionBarSize" 
      android:layout_width="match_parent" 
      android:id="@+id/comments_listview" 
      android:layout_height="match_parent"> 

      <ListView 
       android:scrollbars="vertical" 
       app:layout_behavior="@string/appbar_scrolling_view_behavior" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:id="@+id/rv_view_comments"> 
      </ListView> 

      <TextView 
       android:layout_below="@id/rv_view_comments" 
       android:gravity="center_horizontal" 
       android:padding="16dp" 
       android:textSize="16sp" 
       android:id="@+id/empty_list_item" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:visibility="gone" 
       android:text="@string/noComments" > 
      </TextView> 

      <include layout="@layout/include_progress_overlay"/> 

     </RelativeLayout> 

     <RelativeLayout 
    android:id="@+id/send_message" 
    android:layout_width="match_parent" 
    android:layout_height="90dp" 
    android:layout_margin="4dp" 
    android:layout_alignParentBottom="true"> 

    <EditText 
     android:fontFamily="sans-serif" 
     android:id="@+id/write_comment" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:padding="12dp" 
     android:gravity="left" 
     android:textSize="16sp" 
     android:textColor="@color/black" 
     android:cursorVisible="false" 
     android:textColorHint="@color/material_color_grey_300" 
     android:hint="@string/commentBack" 
     android:background="@drawable/edittext_bg" 
     android:inputType="textMultiLine" 
     android:isScrollContainer="true" 
     android:maxLength="200" 
     android:scrollHorizontally="false" /> 

    <Button 
     android:fontFamily="sans-serif-medium" 
     android:id="@+id/send_comment" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textSize="16sp" 
     android:textColor="@color/colorPrimary" 
     android:layout_marginTop="8dp" 
     android:text="@string/send" 
     android:background="@null" 
     android:layout_below="@id/write_comment" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentBottom="true" 
     android:textAllCaps="false" /> 
</RelativeLayout> 

    </RelativeLayout> 

</android.support.design.widget.CoordinatorLayout> 

编辑:按照Jaydroider的要求,我已经包括照片,以显示我的问题。如果我可以做一个GIF什么的,如果我增加更多的文字我EditText领域,Send按钮将键盘下方消失,除非我从EditText删除文本中,'发送不能推:

Image showing problem

编辑:我也展示了如何滚动到我的ListView的底部,当我点击EditText这里,如果这有帮助。

public void setupComment(final EditText comment) { 
     //Once we send the post, we want to scroll to bottom of listview 
     comment.setOnEditorActionListener(new TextView.OnEditorActionListener() { 

      @Override 
      public boolean onEditorAction(TextView v, int actionId, 
              KeyEvent event) { 
       if (event != null && (event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) { 
        comment.setImeOptions(EditorInfo.IME_ACTION_DONE); 
        resetKeyboardSettings(); 
       } 
       return false; 
      } 
     }); 

     //Hide the cursor until view is clicked on 
     View.OnTouchListener onTouchListener = new View.OnTouchListener(){ 
      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       System.out.println("Touched"); 
       if (v.getId() == comment.getId()) { 
        comment.setCursorVisible(true); 
       } 
       commentsView.postDelayed(new Runnable() { 
        @Override 
        public void run() { 

         commentsView.smoothScrollToPosition(commentsView.getAdapter().getCount()); 
        } 
       }, 750); 
       return false; 
      } 
     }; 
     comment.setOnTouchListener(onTouchListener); 
    } 
+0

当我检查你的布局时,我只能看到'List View'没有任何其他的小部件。请详细说明。 –

+0

@jaydroider我已经更新了上面的代码来演示我的问题。希望有帮助。它是在编辑说'编辑:添加在整个布局根据回答如下:' – user1871869

+0

是的,我已经检查过我的布局我需要澄清'编辑文本'和'按钮'将显示在哪里。目前我只能看到'List View'。 –

回答

2

我已经尝试过与您的Layout一切都完美,没有问题。

But you need to make changes to your manifest where you declared your activity使用更多性能到达android:configChanges

android manifest.xml文件中执行此操作。

 <activity 
      android:name="<Name of project>.activity.Comments" 
      android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation" 
      android:label="Comments" 
      android:screenOrientation="portrait" 
      android:theme="@style/AppTheme.NoActionBar" 
      android:windowSoftInputMode="stateHidden|adjustResize"/> 

下面是XML,我使用

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/comments_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true"> 

    <android.support.design.widget.AppBarLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:theme="@style/AppTheme.PopupOverlay"> 

     <android.support.v7.widget.Toolbar 
      android:id="@+id/comments_appbar" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      android:background="?attr/colorPrimary" 
      app:popupTheme="@style/AppTheme.PopupOverlay" /> 

    </android.support.design.widget.AppBarLayout> 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

     <RelativeLayout 
      android:id="@+id/comments_listview" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_above="@+id/send_message" 
      android:layout_alignParentTop="true" 
      android:layout_marginTop="?attr/actionBarSize"> 

      <ListView 
       android:id="@+id/rv_view_comments" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_alignParentTop="true" 
       android:layout_toEndOf="@+id/empty_list_item" 
       android:scrollbars="vertical" 
       app:layout_behavior="@string/appbar_scrolling_view_behavior" /> 

      <TextView 
       android:id="@+id/empty_list_item" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_below="@+id/rv_view_comments" 
       android:gravity="center_horizontal" 
       android:padding="16dp" 
       android:text="No Comments" 
       android:textSize="16sp" 
       android:visibility="gone" /> 


     </RelativeLayout> 

     <RelativeLayout 
      android:id="@+id/send_message" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_alignParentBottom="true" 
      android:layout_margin="4dp"> 

      <EditText 
       android:id="@+id/write_comment" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:background="#FFFFFF" 
       android:cursorVisible="false" 
       android:fontFamily="sans-serif" 
       android:gravity="left" 
       android:hint="Comment Back" 
       android:inputType="textMultiLine" 
       android:isScrollContainer="true" 
       android:maxLength="200" 
       android:padding="12dp" 
       android:scrollHorizontally="false" 
       android:textColor="#000000" 
       android:textColorHint="@android:color/holo_red_dark" 
       android:textSize="16sp" /> 

      <Button 
       android:id="@+id/send_comment" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_alignParentRight="true" 
       android:layout_below="@id/write_comment" 
       android:layout_marginTop="8dp" 
       android:background="@null" 
       android:fontFamily="sans-serif-medium" 
       android:gravity="center|center_vertical" 
       android:text="Send" 
       android:textAllCaps="false" 
       android:textColor="@color/colorPrimary" 
       android:textSize="16sp" /> 
     </RelativeLayout> 

    </RelativeLayout> 

</android.support.design.widget.CoordinatorLayout> 

I have tested with above changes and it's just working fine you can see below.

enter image description here

希望这将帮助你解决你的问题。

+0

嘿,你介意发布你的代码,以便我可以模仿它吗?我试图听取你在'Manifest'文件中的修改,但是这似乎并没有为我修复。 – user1871869

+0

@ user1871869你需要哪些代码? –

+0

您用于创建上述图像的XML布局代码? – user1871869

0

试试这个:

<RelativeLayout 
     android:id="@+id/send_message" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_margin="4dp" 
     android:layout_alignParentBottom="true"> 

     <EditText 
      android:fontFamily="sans-serif" 
      android:id="@+id/write_comment" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:padding="12dp" 
      android:gravity="left" 
      android:textSize="16sp" 
      android:textColor="@color/black" 
      android:cursorVisible="false" 
      android:textColorHint="@color/material_color_grey_300" 
      android:hint="@string/commentBack" 
      android:background="@drawable/edittext_bg" 
      android:inputType="textMultiLine" 
      android:isScrollContainer="true" 
      android:maxLength="200" 
      android:scrollHorizontally="false" /> 

     <Button 
      android:fontFamily="sans-serif-medium" 
      android:id="@+id/send_comment" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textSize="16sp" 
      android:textColor="@color/colorPrimary" 
      android:layout_marginTop="8dp" 
      android:text="@string/send" 
      android:background="@null" 
      android:layout_below="@id/write_comment" 
      android:layout_alignParentRight="true" 
      android:layout_alignParentBottom="true" 
      android:textAllCaps="false" /> 
    </RelativeLayout> 
+0

嘿,我试着按照你的代码。好像你刚刚在'RelativeLayout'标签中加入了'android:layout_height = wrap_content'。我试图实现你的建议,但似乎并没有工作,现在'ListView'我已经覆盖了我的'EditText'我发布了我的整个布局,希望它会更清楚,并可以帮助我解决这个问题。我试过你上面提到的,但是因为'EditText'被隐藏了,所以我不知道如何解决它。 – user1871869

0

把你所有的编辑文本和按钮滚动视图。

<ScrollView 
      android:layout_width="match_parent" 
      android:layout_height="match_parent"> 
      <LinearLayout 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:orientation="vertical"> 
       <Edittext 
       <EditText 
       <EditText 
       <Btn 
      </LinearLayout 
     </scrollview 
0

我的解决办法是增加ScrollView为您布局的根视图和覆盖查看的onSizeChanged方法。如果EditText的高度增加并且键盘正在阻止您的按钮,请按Smooth Scroll

希望这会有所帮助。

+0

我怎么会有一个'ScrollView'与嵌套'ListView'在它虽然?我明白你在说什么,但我觉得这对我来说不起作用。 – user1871869