7

Mam następujący układ w mojej aplikacji dla Androida, ale mam problem z windowSoftInputMode="adjustResize" aktywności: LinearLayout nazwie „kontener” zawiera wiele EditTexts ale gdy jeden z nich ma skupić się i pojawi się klawiatura , Activity nie zmienia rozmiaru, a EditText jest ukryty za klawiaturą. Myślę, że ma to coś wspólnego z CoordinatorLayout, ale nie mogę się dowiedzieć, co jest z nim nie tak.adjustResize nie działa z CoordinatorLayout

<?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/main_content" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true" 
    android:background="#F0f0f0"> 

    <android.support.design.widget.AppBarLayout 
     android:id="@+id/appbar" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
     android:fitsSystemWindows="true"> 

     <android.support.design.widget.CollapsingToolbarLayout 
      android:id="@+id/collapsing_toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      app:layout_scrollFlags="scroll" 
      app:contentScrim="?attr/colorPrimary"> 

      <android.support.v7.widget.Toolbar 
       android:id="@+id/toolbar" 
       android:layout_width="match_parent" 
       android:layout_height="?attr/actionBarSize" 
       android:background="@color/colorPrimary" 
       app:popupTheme="@style/ThemeOverlay.AppCompat.Light" 
       app:layout_collapseMode="parallax"/> 

      <LinearLayout 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:orientation="vertical" 
       android:layout_marginTop="?attr/actionBarSize" 
       android:padding="15dp"> 

       <android.support.design.widget.TextInputLayout 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:layout_marginTop="10dp"> 

        <EditText 
         android:id="@+id/titleEditText" 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:maxLength="60" 
         android:hint="Title"/> 
       </android.support.design.widget.TextInputLayout> 

       <android.support.design.widget.TextInputLayout 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:layout_marginTop="10dp" 
        android:layout_marginBottom="10dp"> 

        <EditText 
         android:id="@+id/descriptionEditText" 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:maxLength="120" 
         android:hint="Description"/> 
       </android.support.design.widget.TextInputLayout> 
      </LinearLayout> 

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

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

    <android.support.v4.widget.NestedScrollView 
     android:id="@+id/scrollView" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior"> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:orientation="vertical"> 

      <View 
       android:layout_width="match_parent" 
       android:layout_height="20dp"/> 

      <LinearLayout 
       android:id="@+id/container" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:orientation="vertical"/> 
     </LinearLayout> 
    </android.support.v4.widget.NestedScrollView> 
</android.support.design.widget.CoordinatorLayout> 

Próbowałem już Coordinatorlayout adjustresize not working i używam biblioteki support 23.1.1 (a nie jak CoordinatorLayout with NestedScrollView doesn't resize with adjustResize)

+0

Mam dokładnie ten sam problem. Nie jestem w stanie znaleźć żadnego rozwiązania. :(Ja tylko, że jeśli I ustosunkowania się CollapsingToolbarLayout, to działa dobrze, ale muszę CollapsingToolbarLayout zbyt :(Ktoś proszę o pomoc –

Odpowiedz

2
<?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/main_content" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:fitsSystemWindows="true" 
android:background="#F0f0f0"> 

<android.support.design.widget.AppBarLayout 
    android:id="@+id/appbar" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
    android:fitsSystemWindows="true"> 

    <android.support.design.widget.CollapsingToolbarLayout 
     android:id="@+id/collapsing_toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     app:layout_scrollFlags="scroll" 
     app:contentScrim="?attr/colorPrimary"> 

     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      android:background="@color/colorPrimary" 
      app:popupTheme="@style/ThemeOverlay.AppCompat.Light" 
      app:layout_collapseMode="parallax"/> 



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

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



<NestedScrollView 
    android:id="@+id/scrollView" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior" 
     android:padding="15dp"> 

     <android.support.design.widget.TextInputLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginTop="10dp"> 

      <EditText 
       android:id="@+id/titleEditText" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:maxLength="60" 
       android:hint="Title"/> 
     </android.support.design.widget.TextInputLayout> 

     <android.support.design.widget.TextInputLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginTop="10dp" 
      android:layout_marginBottom="10dp"> 

      <EditText 
       android:id="@+id/descriptionEditText" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:maxLength="120" 
       android:hint="Description"/> 
     </android.support.design.widget.TextInputLayout> 
    </LinearLayout> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical"> 

     <View 
      android:layout_width="match_parent" 
      android:layout_height="20dp"/> 

     <LinearLayout 
      android:id="@+id/container" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:orientation="vertical"/> 
    </LinearLayout> 
</NestedScrollView> 

Użyj tego xml, nadzieja będzie działać

+0

Dzięki, ale nawet po przesunięciu 'LinearLayout' Opcja' Activity' nie rozmiaru..!/ –

+0

próby korzystania z Androidem: windowSoftInputMode = "adjustPan | stateAlwaysVisible | stateVisible" zamiast adjustRize –

+0

Gdyby podobny problem android. fitsSystemWindows = "true" była kluczem Dzięki –

8

To od inny answer. Idealne dla mnie.

import android.app.Activity; 
import android.graphics.Rect; 
import android.os.Build; 
import android.view.View; 
import android.view.ViewTreeObserver; 
import android.view.inputmethod.InputMethodManager; 

public class KeyboardUtil { 
    private View decorView; 
    private View contentView; 

    public KeyboardUtil(Activity act, View contentView) { 
     this.decorView = act.getWindow().getDecorView(); 
     this.contentView = contentView; 

     //only required on newer android versions. it was working on API level 19 
     if (Build.VERSION.SDK_INT >= 19) { 
      decorView.getViewTreeObserver().addOnGlobalLayoutListener(onGlobalLayoutListener); 
     } 
    } 

    public void enable() { 
     if (Build.VERSION.SDK_INT >= 19) { 
      decorView.getViewTreeObserver().addOnGlobalLayoutListener(onGlobalLayoutListener); 
     } 
    } 

    public void disable() { 
     if (Build.VERSION.SDK_INT >= 19) { 
      decorView.getViewTreeObserver().removeOnGlobalLayoutListener(onGlobalLayoutListener); 
     } 
    } 


    //a small helper to allow showing the editText focus 
    ViewTreeObserver.OnGlobalLayoutListener onGlobalLayoutListener = new ViewTreeObserver.OnGlobalLayoutListener() { 
     @Override 
     public void onGlobalLayout() { 
      Rect r = new Rect(); 
      //r will be populated with the coordinates of your view that area still visible. 
      decorView.getWindowVisibleDisplayFrame(r); 

      //get screen height and calculate the difference with the useable area from the r 
      int height = decorView.getContext().getResources().getDisplayMetrics().heightPixels; 
      int diff = height - r.bottom; 

      //if it could be a keyboard add the padding to the view 
      if (diff != 0) { 
       // if the use-able screen height differs from the total screen height we assume that it shows a keyboard now 
       //check if the padding is 0 (if yes set the padding for the keyboard) 
       if (contentView.getPaddingBottom() != diff) { 
        //set the padding of the contentView for the keyboard 
        contentView.setPadding(0, 0, 0, diff); 
       } 
      } else { 
       //check if the padding is != 0 (if yes reset the padding) 
       if (contentView.getPaddingBottom() != 0) { 
        //reset the padding of the contentView 
        contentView.setPadding(0, 0, 0, 0); 
       } 
      } 
     } 
    }; 


    /** 
    * Helper to hide the keyboard 
    * 
    * @param act 
    */ 
    public static void hideKeyboard(Activity act) { 
     if (act != null && act.getCurrentFocus() != null) { 
      InputMethodManager inputMethodManager = (InputMethodManager) act.getSystemService(Activity.INPUT_METHOD_SERVICE); 
      inputMethodManager.hideSoftInputFromWindow(act.getCurrentFocus().getWindowToken(), 0); 
     } 
    } 
} 

można następnie wykorzystać je w swojej działalności, wykonując następujące czynności:

// zainicjować KeyboardUtil (można to zrobić globalne)

KeyboardUtil keyboardUtil = new KeyboardUtil(this, findViewById(android.R.id.content)); 

//enable it 
keyboardUtil.enable(); 

Aby wyłączyć tę zmianę rozmiaru, to zrobić

//disable it 
keyboardUtil.disable(); 
+0

Próbowałem tego i to nie działa dla mnie. Włączyłem to tylko raz w onCreate(). Czy jest coś jeszcze, co powinienem zrobić? –