1. ホーム
  2. android

Android Linear Layout - 要素を画面の一番下に配置するには?

2023-10-13 18:05:37

質問

私は TextView を使用しているランドスケープ・アクティビティの下部にピン留めしたい。 LinearLayout を使っている景観活動の下に留めたい。

を設定しました。 android:gravity="bottom" を設定しましたが、まだ、テキストビューの最後の要素のすぐ下にある LinearLayout の最後の要素のすぐ下にあることを好みますが、これはまさに私が望まないことです。

何か提案はありますか?

どのように解決するのですか?

更新: この質問にはまだアップヴォートがあり、これはまだ受け入れられた回答であり、私はうまく答えられなかったと思います。最高の情報がそこにあることを確認する精神で、私はこの回答を更新することにしました。

現代のAndroidでは、私は ConstraintLayout を使います。そのほうがパフォーマンスもよく、わかりやすいからです。

<ConstraintLayout>
   <View
      android:id="@+id/view1"
      ...other attributes elided... />
   <View
      android:id="@id/view2"        
      app:layout_constraintTop_toBottomOf="@id/view1" />
      ...other attributes elided... />

   ...etc for other views that should be aligned top to bottom...

   <TextView
    app:layout_constraintBottom_toBottomOf="parent" />

ConstraintLayoutを使用したくない場合、拡張ビューを持つLinearLayoutを使用することは、余分なスペースを取ることを処理する簡単で素晴らしい方法です(@Matthew Willsによる回答を参照)。ボトムビューの上のビューの背景を拡大したくない場合は、スペースを取るために不可視のビューを追加することができます。

私が最初に与えた答えは動作しますが、非効率的です。非効率であることは、単一のトップレベルのレイアウトでは大したことではありません。 ListView または RecyclerView というように、よりシンプルでないにしても、ほぼ同じレベルの労力と複雑さを持つより良い方法があるため、それを行う理由はありません。

TextViewをLinearLayoutから取り出し、LinearLayoutとTextViewをRelativeLayout内に配置します。属性を追加します。 android:layout_alignParentBottom="true" をTextViewに追加します。上記の属性以外のnamespaceやその他の属性は全て消して。

<RelativeLayout>
  <LinearLayout>
    <!-- All your other elements in here -->
  </LinearLayout>
  <TextView
    android:layout_alignParentBottom="true" />
</RelativeLayout>