2016-12-06 3 views
4

ok im уже делает (я считаю) все, что мне нужно сделать, чтобы сделать мой макет приложения прокручивать/перемещаться вверх, когда отображается мягкая клавиатура, но она не работает, поэтому я угадываю должно быть что-то, что я делаю, останавливая его, я задаюсь вопросом, не фиксирует ли его фиксированные высоты im, которые дают мои зрители или что-то, о чем я не знаю, и читаю сообщения, которые описывают относительные макеты как «дробящие детские представления», когда клавиатура показана, а линейные макеты не дробят мнения ребенка, поэтому с этим в виду мои макетыandroid move layout up, когда на клавиатуре отображается мягкая клавиатура

MAIN_ACTIVITY

<?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" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context=".MainActivity"> 

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

     <android.support.v4.view.ViewPager 
      android:id="@+id/viewpager2" 
      android:layout_width="match_parent" 
      android:layout_marginLeft="8dp" 
      android:layout_marginRight="8dp" 
      android:layout_marginTop="8dp" 
      android:layout_height="@dimen/card_pager_height" /> 

     <RelativeLayout 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/predictsHolder" 
      android:layout_below="@id/viewpager2"> 

     <android.support.v4.view.ViewPager 
      android:id="@+id/viewpager_predicts" 
      android:layout_width="wrap_content" 
      android:layout_marginLeft="8dp" 
      android:layout_marginRight="8dp" 
      android:layout_marginTop="4dp" 
      android:layout_height="@dimen/predicts_pager_height" /> 

     </RelativeLayout> 

     <android.support.design.widget.TabLayout 
      android:id="@+id/tabs" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_below="@id/predictsHolder" 
      app:tabGravity="fill" 
      android:theme="@style/CustomTabLayoutStyle" /> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_below="@id/tabs"> 


     <android.support.v4.view.ViewPager 
      android:id="@+id/viewpager" 
      android:background="@color/windowBackground" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      /> 

     </LinearLayout> 

    </RelativeLayout> 

<android.support.design.widget.AppBarLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 

    <android.support.v7.widget.Toolbar 
     android:id="@+id/toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="?attr/actionBarSize" /> 

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

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_marginTop="@dimen/card_pager_height"> 

    <android.support.design.widget.FloatingActionButton 
     android:id="@+id/fab2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginRight="12dp" 
     android:layout_marginEnd="12dp" 
     app:elevation="4dp" 
     android:src="@drawable/ic_playlist_play_white_24dp" 
     android:layout_gravity="right|top" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentEnd="true"/> 

</RelativeLayout> 

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

Там в общей сложности 3 viewpagers каждый из них имеет различное расположение первого (самый верхний)

ПЕРВЫЙ ViewPager

<RelativeLayout 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" 
android:background="@drawable/border" 
android:paddingLeft="2dp" 
android:paddingRight="2dp" 
tools:context=".SpeakGridDB"> 

<android.support.v7.widget.RecyclerView 
    android:id="@+id/card_speak_grid" 
    android:layout_width="match_parent" 
    android:layout_gravity="center" 
    android:layout_height="wrap_content"/> 

</RelativeLayout> 

ВТОРОГО ViewPager

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:layout_margin="5dp" 
android:paddingLeft="2dp" 
android:paddingRight="2dp" 
android:background="@drawable/border"> 

<android.support.v7.widget.RecyclerView 
    android:id="@+id/predicts_card_speak_grid" 
    android:layout_width="match_parent" 
    android:layout_gravity="center" 
    android:layout_height="wrap_content"/> 

</RelativeLayout> 

ТРЕТИЙ ViewPager

я хотел бы этот макет еще будет присутствовать, когда клавиатура всплывает его в настоящее время в нижней части макета Айв положить его в линейной компоновке, а также пытался ставить его ViewPager в линейной компоновке

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:orientation="vertical" 
android:background="@color/windowBackground" 
tools:context=".OneFragment"> 

<android.support.v4.widget.SwipeRefreshLayout 
    android:id="@+id/activity_main_swipe_refresh_layout" 
    android:layout_width="match_parent" 
    android:background="@color/windowBackground" 
    android:layout_height="wrap_content"> 

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/card_grid" 
     android:background="@color/windowBackground" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:clipToPadding="false"/> 

</android.support.v4.widget.SwipeRefreshLayout> 

</LinearLayout> 

Я Кроме того, используя

 android:windowSoftInputMode="adjustResize" 

в мой манифест и также пытались

 android:windowSoftInputMode="adjustPan" 

, но никакой радости, кажется, как tabLayout не сдвигается вверх немного, когда KEYB Орды показаны, но в целом два верхних мнения остаются на месте, а нижние один (один я хочу показан) спрятано с помощью клавиатуры любой помощи

UPDATE еще не дальше с этим я не могу сделать макет с фиксированными высотами и прокручивайте его вверх, пока не появится экранная клавиатура, поэтому нет проблемы, но я должен использовать вертикальный элемент компоновки элемента, и это не то, что я хочу сделать. ive также попробовал обернуть все это в виде прокрутки и использовать isScrollContainer правда, но до сих пор нет радости, у кого есть идеи?

+0

является FAB, когда вверх появляется клавиатура? –

+0

@ darshan miskin нет, это не так, но я не хочу, чтобы его поклонник был довольно высок в макете и не должен был быть затронут. –

ответ

1

Я могу ошибиться, но причина этой проблемы, вероятно, известно, Android ошибка.

Итак, во-первых , вам нужно добавить android:windowSoftInputMode="stateHidden|adjustResize" внутри <activity> тега.

Во-вторых, вам нужно добавить этот класс в проект:

public class AndroidBug5497Workaround { 

    // For more information, see https://code.google.com/p/android/issues/detail?id=5497 
    // To use this class, simply invoke assistActivity() on an Activity that already has its content view set. 

    public static void assistActivity (Activity activity) { 
     new AndroidBug5497Workaround(activity); 
    } 
    private View mChildOfContent; 
    private int usableHeightPrevious; 
    private FrameLayout.LayoutParams frameLayoutParams; 

    private AndroidBug5497Workaround(Activity activity) { 
     FrameLayout content = (FrameLayout) activity.findViewById(android.R.id.content); 
     mChildOfContent = content.getChildAt(0); 
     mChildOfContent.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { 
      public void onGlobalLayout() { 
       possiblyResizeChildOfContent(); 
      } 
     }); 
     frameLayoutParams = (FrameLayout.LayoutParams) mChildOfContent.getLayoutParams(); 
    } 

    private void possiblyResizeChildOfContent() { 
     int usableHeightNow = computeUsableHeight(); 
     if (usableHeightNow != usableHeightPrevious) { 
      int usableHeightSansKeyboard = mChildOfContent.getRootView().getHeight(); 
      int heightDifference = usableHeightSansKeyboard - usableHeightNow; 
      if (heightDifference > (usableHeightSansKeyboard/4)) { 
       // keyboard probably just became visible 
       frameLayoutParams.height = usableHeightSansKeyboard - heightDifference; 
       } else { 
       // keyboard probably just became hidden 
       frameLayoutParams.height = usableHeightSansKeyboard; 
      } 
      mChildOfContent.requestLayout(); 
      usableHeightPrevious = usableHeightNow; 
     } 
    } 

    private int computeUsableHeight() { 
     Rect r = new Rect(); 
     mChildOfContent.getWindowVisibleDisplayFrame(r); 
     return (r.bottom - r.top); 
    } 

} 

А затем просто использовать его, вызвав assistActivity() метод в MainActivity, который держит ViewPagers:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(...); 
    AndroidBug5497Workaround.assistActivity(this); 
    ... 
} 

Для дополнительной проверки фона this нить.

+0

привет, rom4ek, первое спасибо, и какое прекрасное имя для этого класса lol ive застрял в нем, и когда клавиатура показана, изменения макета, но не так, как я искал, когда клавиатура скрыта, макет возвращается к норме, вы создали это? если да, то что мне нужно будет попробовать и приспособиться, чтобы получить это идеальное im, угадывающее его что-то на этой строке frameLayoutParams.height = usableHeightSansKeyboard - heightDifference; прямо сейчас я просто заканчиваю пустым экраном –

+0

Итак, когда ваша клавиатура показана, у вас пустой экран? – rom4ek

+0

Это не пусто, не жалко, это на самом деле мой фон макета, в котором хранятся зрители. Я изменил линию на этот кадрLayoutParams.height = usableHeightSansKeyboard - heightDifference/2; и я все еще вижу половину верхней части моего макета (очевидно) –

0

Вы можете попробовать добавить android:fitsSystemWindows="true" в свой координатор макета

+0

Некоторый комментарий о том, что будет делать и где он должен быть добавлен, был бы полезен. –

+0

Спасибо, я пробовал это, но без изменений –

Смежные вопросы