2

HTMLファイルから選択したフォームフィールドをプログラムでLinearLayoutに追加しようとしています。一番下に次のボタンがありますが、ディスプレイには切り取られています。私はタブレットでそれを試しても、それはまだ表示されません。Android ScrollViewが最下部で切り捨てられる

は、ここでアプリのスクリーンショットです: screenshot

あなたが見ることができるように、要素をレンダリングなっているが、最後の1が何らかの理由で画面をオフに実行されます。

フラグメントのXML:私は(私はフラグメントのonCreateViewで行われた方法formInflatorを呼び出し、フラグメントおよびElementsオブジェクトからのLinearLayoutを渡しています

<?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:id="@+id/main_content" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true" 
    tools:context=".dataInput.DataInputActivity"> 

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

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

     </android.support.v7.widget.Toolbar> 

     <android.support.design.widget.TabLayout 
      android:id="@+id/tabs" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" /> 

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

    <android.support.v4.view.ViewPager 
     android:id="@+id/container" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior" /> 

    <android.support.design.widget.FloatingActionButton 
     android:id="@+id/fab" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="end|bottom" 
     android:layout_margin="@dimen/fab_margin" 
     android:src="@android:drawable/ic_media_play" /> 

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

<FrameLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    tools:context=".dataInput.PropertyInfoFragment" 
    android:layout_height="match_parent" 
    android:layout_width="match_parent" 
    android:paddingLeft="20dp" 
    android:paddingRight="20dp"> 

    <ScrollView 
     android:fillViewport="true" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

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

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

      </LinearLayout> 
      <Button 
       android:id="@+id/nextButton" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:text="@string/next" 
       android:background="@color/colorPrimary" 
       android:textColor="@android:color/white"/> 
     </LinearLayout> 

    </ScrollView> 

</FrameLayout> 

アクティビティのXMLを呼び出しますJsoupライブラリから)LinearLayout内に配置したいすべての要素が含まれています:

私が間違っているの何

public void formInflator(LinearLayout parentLayout, Elements formElements) { 
    TextInputLayout index = null; 
    for(Element textField : formElements) { 
     TextInputEditText editText = new TextInputEditText(context); 
     editText.setId(View.generateViewId()); 
     editText.setHint(textField.id()); 
     editText.setText(textField.text()); 
     LinearLayout.LayoutParams editTextParams = new LinearLayout.LayoutParams(
       LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); 
     editText.setLayoutParams(editTextParams); 

     TextInputLayout textInputLayout = new TextInputLayout(context); 
     textInputLayout.setId(View.generateViewId()); 
     textInputLayout.setTag(textField.id()); 
     RelativeLayout.LayoutParams textInputLayoutParams = new RelativeLayout.LayoutParams(
       RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 
     if (index == null) 
      index = textInputLayout; 
     else 
      textInputLayoutParams.addRule(RelativeLayout.BELOW, index.getId()); 

     textInputLayout.setLayoutParams(textInputLayoutParams); 
     textInputLayout.addView(editText, editTextParams); 

     parentLayout.addView(textInputLayout, textInputLayoutParams); 
     index = textInputLayout; 
    } 
} 

任意のアイデア:

は、ここでの方法formInflatorですか?

+0

それはscrollviewかどうきっとあなただけの「カットオフ」コンテンツの残りの部分を見るためにスクロールアップすることができますか?あなたが達成しようとしている意図された行動は何ですか? – wanpanman

+0

@wanpanman私は私の質問を正しく言いませんでした。問題は、すべてのEditTextビューの後にボタンがあるはずだということです。ただし、ScrollViewは一番下までスクロールしません。私がスクリーンショットで示したことは、それが最も遠いところです。 – Mak

+0

私はアクションバーのために感じている。私は同じ問題に直面しています。 私はタブ付きのアクティビティを使用しており、タブ内には 'EditText'があります。最初は、OPのように底が切り取られます。しかし、私が 'EditText'を起動してソフトキーボードが現れたら、アクションバーは消えてしまいます(これは別の問題です)。しかし、ScrollViewは、キーボードが抜かれても完璧に動作します(アクションバーまだ失われている)。 – xSooDx

答えて

5

ScrollView layout_heightをmatch_parentに変更してください。それはwrap_contentを得る子供です。

+0

ありがとう、間違いなく助けて!しかし、それは問題を完全に解決しません。これで、最後の 'EditText'ビューの一番下までスクロールしますが、' Button'はまだ切り取られます。2番目の 'LinearLayout'の上に' Button'を移動しようとしましたが、最後の 'EditText'がもう一度カットオフされてしまいました – Mak

+0

' formInflator'では 'parentLayout 'に' TextInputLayout'の 'RelativeLayout'レイアウトパラメータを設定しようとしています'。しかし、 'parentLayout'は' RelativeLayout'ではなく 'LinearLayout'ですので、あなたが期待していることをすることはできません。 –

3

私が今までに見つけた最も近い解決策は、ゴーストビューを追加することです。ScrollViewが最後の要素の一部を食べ​​ている場合は、クッキーを付けます。

例:

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

活動にあなたのアクションバーを追加します。 Androidでは、スクロールするときに、ビューポートを認識して下部の不足しているツールバーの高さを下に追加します。

AppCompatActivity

Toolbar toolbar = getActivity().findViewById(R.id.toolbar); 
setSupportActionBar(toolbar); 
// if needed... 
getSupportActionBar().setDisplayShowTitleEnabled(false); 
関連する問題