フラグメントビュー全体のフラグメントスペースを埋めていない -- android フィールド と android-layout フィールド と android-fragments フィールド 関連 問題

Fragment view not filling the whole fragment space












0
vote

問題

日本語

私は3つのサブラグメントからなるフラグメントを持っています:

<事前> <コード> <?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout 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:background="@color/white"> <fragment android:id="@+id/header" class="xxx.xxx.xxx.HeaderFragment" android:layout_width="0dp" android:layout_height="wrap_content" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <fragment android:id="@+id/content" class="xxx.xxx.xxx.ContentFragment" android:layout_width="0dp" android:layout_height="0dp" app:layout_constraintBottom_toTopOf="@+id/footer" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/header" /> <fragment android:id="@+id/footer" class="xxx.xxx.xxx.FooterFragment" android:layout_width="0dp" android:layout_height="wrap_content" android:maxHeight="64dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent"/> </android.support.constraint.ConstraintLayout>

このように、ContentFragmentは、以下の図に示すように、ヘッダーフラグメントとフッターフラグメントの間のスペースを埋めます。

green =ヘッダ

blue =コンテンツ

赤=フッター

イメージの説明を入力します。ここで

今度はContentFragmentレイアウト(1つのTextViewと1つのスクロールビュー)に2つのビューを追加したいので、それらのビューは青いスペース全体を利用できるようにします。

これはContentFragmentのレイアウトです:

<事前> <コード> <?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout 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" android:background="@color/lightBlue"> <TextView android:background="@color/white" android:id="@+id/textView" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginTop="32dp" app:layout_constraintEnd_toEndOf="@id/right" app:layout_constraintStart_toStartOf="@id/left" app:layout_constraintTop_toTopOf="parent"/> <ScrollView android:id="@+id/scrollView" android:layout_width="0dp" android:layout_height="0dp" android:layout_marginTop="16dp" android:background="@color/white" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="@id/right" app:layout_constraintStart_toStartOf="@id/left" app:layout_constraintTop_toBottomOf="@+id/textView"> <TextView android:id="@+id/veryLongTextView" android:layout_width="match_parent" android:layout_height="wrap_content"/> </ScrollView> <android.support.constraint.Guideline android:id="@+id/left" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" app:layout_constraintGuide_percent="0.05" /> <android.support.constraint.Guideline android:id="@+id/right" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" app:layout_constraintGuide_percent="0.95" /> </android.support.constraint.ConstraintLayout>

これは代わりに取得するものです。

画像の説明を入力しますここで

誰かがスクロールビューの下部と青い部分の底部の間にスペースがある理由を説明できますか? Android Studioのようにこのようにレンダリングされている制約で定義したものではありません:

画像の説明を入力します。ここで

英語

I have a Fragment composed of three subfragments :

<?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout 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:background="@color/white">      <fragment         android:id="@+id/header"         class="xxx.xxx.xxx.HeaderFragment"         android:layout_width="0dp"         android:layout_height="wrap_content"         app:layout_constraintEnd_toEndOf="parent"         app:layout_constraintStart_toStartOf="parent"         app:layout_constraintTop_toTopOf="parent" />      <fragment         android:id="@+id/content"         class="xxx.xxx.xxx.ContentFragment"         android:layout_width="0dp"         android:layout_height="0dp"         app:layout_constraintBottom_toTopOf="@+id/footer"         app:layout_constraintEnd_toEndOf="parent"         app:layout_constraintStart_toStartOf="parent"         app:layout_constraintTop_toBottomOf="@id/header" />      <fragment         android:id="@+id/footer"         class="xxx.xxx.xxx.FooterFragment"         android:layout_width="0dp"         android:layout_height="wrap_content"         android:maxHeight="64dp"         app:layout_constraintBottom_toBottomOf="parent"         app:layout_constraintEnd_toEndOf="parent"         app:layout_constraintStart_toStartOf="parent"/> </android.support.constraint.ConstraintLayout> 

This way, the ContentFragment fills the space between HeaderFragment and FooterFragment, as shown in the picture below :

green = header

blue = content

red = footer

enter image description here

Now I would like to add two views to the ContentFragment layout (one TextView and one ScrollView), so that those views take the whole blue space available.

Here is the layout for ContentFragment :

<?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout 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"     android:background="@color/lightBlue">      <TextView         android:background="@color/white"         android:id="@+id/textView"         android:layout_width="0dp"         android:layout_height="wrap_content"         android:layout_marginTop="32dp"         app:layout_constraintEnd_toEndOf="@id/right"         app:layout_constraintStart_toStartOf="@id/left"         app:layout_constraintTop_toTopOf="parent"/>      <ScrollView         android:id="@+id/scrollView"         android:layout_width="0dp"         android:layout_height="0dp"         android:layout_marginTop="16dp"         android:background="@color/white"         app:layout_constraintBottom_toBottomOf="parent"         app:layout_constraintEnd_toEndOf="@id/right"         app:layout_constraintStart_toStartOf="@id/left"         app:layout_constraintTop_toBottomOf="@+id/textView">          <TextView             android:id="@+id/veryLongTextView"             android:layout_width="match_parent"             android:layout_height="wrap_content"/>     </ScrollView>      <android.support.constraint.Guideline         android:id="@+id/left"         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:orientation="vertical"         app:layout_constraintGuide_percent="0.05" />      <android.support.constraint.Guideline         android:id="@+id/right"         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:orientation="vertical"         app:layout_constraintGuide_percent="0.95" />  </android.support.constraint.ConstraintLayout> 

This is what I get instead :

enter image description here

Can someone explain why there is some space between the bottom of the scrollview and the bottom of the blue part ? It is not what I have defined in the constraints, which is rendered like this in Android Studio :

enter image description here

</div
        

回答リスト

0
 
vote
vote
ベストアンサー
 

私はまだこれが起こっているのかわかりません。私の推測は、ガイドライン以下のように:

<事前> <コード> private static void printReport(String filename, String str) throws Exception /* No, it doesn't. The only calls you had outside your catch-all `try` don't throw exceptions. */ { ErrorCheck ec = new ErrorCheck(); // Recommend not creating this until/unless you need it String fileName = "/var/Emails_log/"+filename; // VERY poor practice having two locals that only differ by the capitalization of one character in the middle (`filename` and `fileName`) Path filePath = Paths.get(fileName); // File file = new File(fileName); <== Removed, since you never use it for anything try { // Make sure the directories exist Files.createDirectories(filePath.getParent()); // No need for your null check, so I removed it; based on `fileName`, it will always have a parent // Open the file, creating it if it doesn't exist try ( final BufferedWriter out = Files.newBufferedWriter( filePath, StandardCharsets.UTF_8, StandardOpenOption.CREATE, StandardOpenOption.APPEND) ) { // Write to out here } } catch (Exception e) { // Log-and-continue isn't generally best practice; and if you're going to do it ec.errorMsg("ERROR: GSW.SendEmail.Exception =>",e); // <== Um...send mail failed? This isn't sending mail, it's putting something in a file. } // Using the try-with-resources, we don't have to worry about the flush and close calls } 4 このようにレンダリングされている

イメージの説明を入力します。ここで

 

I am still unsure why this is happening. My guess is that Android cannot compute the right height for the ContentFragment at runtime, because the problem disappears if I define the fragments height using Guidelines as shown below :

    <?xml version="1.0" encoding="utf-8"?>     <android.support.constraint.ConstraintLayout 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:background="@color/white">          <fragment             android:id="@+id/header"             class="xxx.xxx.xxx.HeaderFragment"             android:layout_width="0dp"             android:layout_height="wrap_content"             app:layout_constraintBottom_toTopOf="@+id/topLimit"             app:layout_constraintEnd_toEndOf="parent"             app:layout_constraintStart_toStartOf="parent"             app:layout_constraintTop_toTopOf="parent" />          <fragment             android:id="@+id/content"             class="xxx.xxx.xxx.ContentFragment"             android:layout_width="0dp"             android:layout_height="0dp"             app:layout_constraintBottom_toTopOf="@+id/bottomLimit"             app:layout_constraintEnd_toEndOf="parent"             app:layout_constraintStart_toStartOf="parent"             app:layout_constraintTop_toBottomOf="@id/topLimit" />          <fragment             android:id="@+id/footer"             class="xxx.xxx.xxx.FooterFragment"             android:layout_width="0dp"             android:layout_height="0dp"             app:layout_constraintTop_toBottomOf="@id/bottomLimit"             app:layout_constraintBottom_toBottomOf="parent"             app:layout_constraintEnd_toEndOf="parent"             app:layout_constraintStart_toStartOf="parent"/>          <android.support.constraint.Guideline             android:id="@+id/topLimit"             android:layout_width="wrap_content"             android:layout_height="wrap_content"             android:orientation="horizontal"             app:layout_constraintGuide_percent="0.15" />          <android.support.constraint.Guideline             android:id="@+id/bottomLimit"             android:layout_width="wrap_content"             android:layout_height="wrap_content"             android:orientation="horizontal"             app:layout_constraintGuide_percent="0.85" />     </android.support.constraint.ConstraintLayout> 

Which is rendered like this :

enter image description here

</div
 
 

関連する質問

0  WebViewフラグメント用のローディングスピナー  ( Loading spinner for webview fragment ) 
次は、WebViewを示すMy ScoreFragment.javaのコードです。 <事前> <コード> IMPORT BLAH BLAH public class ScoreFragment extends Fragment { public ScoreF...

-1  支援の発生  ( Occurence of support ) 
私はFacebookのログインアプリケーションを開発しています。そこでアクティビティの代わりにアクティビティサブクラス<コード> FragmentActivity を開始できません。私が使ったコードの下を見つけてください。 エラー:Android.Suppor...

0  ItemClickのAndroidフラグメント(ListView)  ( Android fragments on itemclick listview ) 
アクティビティを持ちたい、ここではレイアウトの中で、固定コンテンツ(配列)を持つListViewがあり、右側には動的コンテンツが欲しい(SO MISTMENTS)。 MainLayoutはこのようなものです(Activity_Vizitare.xml): <事...

38  FragmentPagerAdapter GetItemがトリガされていません  ( Fragmentpageradapter getitem is not being triggered ) 
現在、<コード> FragmentActivity で、次のコードを使用して2種類のフラグメントを切り替えます。 <事前> <コード> private void toggle() { Fragment oldFragment = getSupportF...

2  RecyClerviewからのデータが消えます  ( Disappearing data from recyclerview ) 
ViewPagerを含むフラグメントを使ってアプリを作成しました。そのViewPagerの内側はRecyClerviewを使用してリストを表示しています。アプリを起動するとすべてが素晴らしいです。しかし、私がいくつかのタブをスワイプして戻ってくるリストは表示...

125  FragmentPagerAdapter GetItemは呼び出されません  ( Fragmentpageradapter getitem is not called ) 
fragmentPagerAdapterでフラグメントを再利用できません..StroasionItem()メソッドを使用して、フラグメントを削除していますが、それでもgetItem()と呼ばれていません。 FragmentStatePagerAdapter ...

0  新しい活動を開始し、それらをフラグメントベースのレイアウトに追加する  ( Starting new activities and adding them to a fragment based layout ) 
私はフラグメントAPIがきれいに新しいので、私の質問があります。 Activity と ActionBar がタブであるとしましょう。アプリケーションからメッセージングアプリケーションを起動したいとします。通常は、新しい Activity として始まります。 ...

1  oNactivityResult()新しいアクティビティがフラグメントから始めたときに主な活動で呼び出されない  ( Onactivityresult not called on main activity when new activity started from fr ) 
StartActivityForResult()がフラグメントから呼び出されたときに、OnActivityResult()がフラグメントで呼び出されない理由が多数あることを知っています。しかし私の訴訟は異なります。 マイアクティビティAは、結果のためにアク...

0  Android - フラグメントはSaveinStanseStateではありません  ( Android fragment doesnt saveinstancestate ) 
私はAndroidに新しい、私はフラグメントを持っていて、それはonpause、destroyview、destroy、destray、しかし、OnSaveInStanseStateは呼ばれません。 これは予想されていますか? 状態を保存する方法は? <事...

16  Android:断片からActionBarメニュー項目を変更します  ( Android change actionbar menu items from fragment ) 
断片で行われるものに基づいて、活動行動バーの内容を変更する方法の迅速な例を挙げてください。私の意図: ノーマルメニュー項目 - &gt;フラグメント内の何かが移動されます - &gt。メニュー項目の保存/廃棄ボタンに変更します。 私の最初のインパルスは、アクテ...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有