パターン2 … 「android:layout_weight」を使用(1-4-3)しているのに、「android:layout_width」を"0dp"にしていない

個人的な調査

カテゴリー: layout_weight  閲覧数:756 配信日:2014-05-12 07:00




概要


・Button1が画面の3/4、Button3が1/4を占拠し、Button2に至っては画面から消えている

原因
・横方向で「android:layout_weight」を使用しているのに、「android:layout_width」を"0dp"にしていない


構成


・1つのLinearLayoutの中で配置

LinearLayout
 │ 
 ├LinearLayout
 │ └Button
 │ └Button
 │ └Button 
 │ 
 └LinearLayout

・最後のLinearLayoutでは、何も表示していない


コード


▼/res/layout/activity_main.xml
<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="match_parent"
   android:orientation="vertical"
   android:paddingBottom="@dimen/activity_vertical_margin"
   android:paddingLeft="@dimen/activity_horizontal_margin"
   android:paddingRight="@dimen/activity_horizontal_margin"
   android:paddingTop="@dimen/activity_vertical_margin"
   tools:context=".MainActivity">

   <LinearLayout
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:orientation="horizontal">
       <Button
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
           android:layout_weight="1"
           android:text="1"/>
       <Button
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
           android:layout_weight="4"
           android:text="4"/>
       <Button
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
           android:layout_weight="3"
           android:text="3"/>
   </LinearLayout>

   <LinearLayout
       android:layout_width="match_parent"
       android:layout_height="0dp"
       android:layout_weight="1">
       
   </LinearLayout>
</LinearLayout>



詳細


何らかの法則性があるように見えるのは、たまたまそうなっているだけ、なことが後に判明

余白は負の値になり得る
・Buttonを3つ配置し、全てのlayout_widthをmatch_parentにした場合、余白は0でなく、Buttonの横幅(match_parentなので親ビューの幅)2つ分マイナスになる

負の値に対するweightの動き
・Button横幅を1とすると、余白は-2となり、各Buttonのweightは、下記のようになる
-2 * (設定したlayout_weight / 各Buttonのlayout_weight合計値)

Button1が画面の3/4になる理由
・横幅の1/4分マイナス
-2 * (1/8) = -0.25
1 + (-0.25) = 0.75

Button3が画面の1/4になる理由
・横幅の3/4分マイナス
-2 * (3/8) = -0.75
1 + (-0.75) = 0.25

Button2が表示されない理由
-2 * (4/8) = -1
1 + (-1) = 0


週間人気ページランキング / 4-30 → 5-6
順位 ページタイトル抜粋 アクセス数
1 Androidエミュレータで、PCキーボード入力を有効にしたい | エミュレータ(環境構築) 23
2 public 型 ★★ はそれ独自のファイル内に定義されなければなりません | エラー 21
3 この行に複数マーカーがあります | エラー(エラー) 18
4 ○○は解決できないか、フィールドではありません | エラー(エラー) 9
4 インポートされた ★★ は見つかりません | エラー 9
5 「Android Studio 3.0.1」で、デザインプレビュー画面が表示されない。「waiting build for finish」が終わらない | Android Studio(IDE) 8
6 プラグイン "org.eclipse.ui.workbench" からのコードの起動で問題が発生しました | エラー(エラー) 7
7 いくつかのプロジェクトは、ワークスペース・ディレクトリーにすでに存在するため、インポートできません | エラー 5
8 Android Studio で、ソースコードが改行できない | Android Studio(IDE) 4
9 Eclipseが起動しない … ユーザ操作は待機中です | Eclipse(IDE) 3
9 Apache Maven がインストール出来ない | Apache Maven(環境構築) 3
9 No resource identifier found for attribute 'showAsAction' in package 'android' | エラー 3
9 Android FAQ 3
10 Invalid property category path: ValidationPropertiesPage (bundle: org.eclipse.wst.xml.ui, propertyPage: org.eclipse.wst.xml.ui.propertyPage.project.validation) | 警告(エラー) 2
10 キーバインドの競合が発生しました。 通常のアクセラレーター操作を妨げる可能性があります。 | エラー(エラー) 2
10 Android Studio の Designプレビュー で、ウィジェットをドラッグ配置できない | Android Studio(IDE) 2
10 values-ja/strings.xmlに記載した内容が反映されない | 多言語化(環境構築) 2
11 エミュレーター画面表示を大きくしたい | エミュレータ(環境構築) 1
11 Android用と思われるLogCatビューが、LogCat(使用すべきではありません)と表示されている理由 | Eclipse(IDE) 1
11 データベースを利用するためには、 SQLiteOpenHelperクラスが必要なの? | SQLite 1
2025/5/7 1:01 更新
指定期間人気ページランキング / 2020-5-27 → 2025-5-6
順位 ページタイトル抜粋 アクセス数
1 インポートされた ★★ は見つかりません | エラー 23094
2 public 型 ★★ はそれ独自のファイル内に定義されなければなりません | エラー 10056
3 ○○は解決できないか、フィールドではありません | エラー(エラー) 7053
4 いくつかのプロジェクトは、ワークスペース・ディレクトリーにすでに存在するため、インポートできません | エラー 6846
5 この行に複数マーカーがあります | エラー(エラー) 6825
6 ★★ を型に解決できません | エラー(エラー) 6271
7 プラグイン "org.eclipse.ui.workbench" からのコードの起動で問題が発生しました | エラー(エラー) 5018
8 「Android Studio 3.0.1」で、デザインプレビュー画面が表示されない。「waiting build for finish」が終わらない | Android Studio(IDE) 4283
9 Android FAQ 3059
10 Androidエミュレータで、PCキーボード入力を有効にしたい | エミュレータ(環境構築) 2957
11 Eclipse で「パッケージ名」変更 | Eclipse(IDE) 2747
12 キーバインドの競合が発生しました。 通常のアクセラレーター操作を妨げる可能性があります。 | エラー(エラー) 2267
13 Eclipse で「プロジェクト名」「パッケージ名」を変更する方法 | Eclipse(IDE) 2189
14 Eclipseが起動しない … ユーザ操作は待機中です | Eclipse(IDE) 2172
15 Android Studio で、ソースコードが改行できない | Android Studio(IDE) 1954
16 内部エラーの表示中に内部エラーが発生しました | エラー 1793
17 このメソッドは型 ○○ の結果を戻す必要があります | エラー(エラー) 1761
18 インポートされた java.io は見つかりません | エラー(エラー) 1577
19 エラーが発生しました。ログ・ファイル ★★.log.を参照してください | エラー(エラー) 1373
20 インポートされたRは見つかりません | エラー(エラー) 1080
2025/5/7 1:01 更新