android - 如何在 Horizo​​ntalScrollView 中设置线性布局宽度?

标签 android android-layout android-linearlayout horizontalscrollview

我有一个 LinearLayout (我们称它为 A)它的宽度设置为 fill_parent ,这个布局包含一堆另一个 LinearLayouts (我们称它们为 B),我希望屏幕只显示 四个 B,所以我分配了 weight_sum A4并将每个 B 分配为 1 ,现在我想添加一个 HorizontalScrollView因此,如果我有 6 个 B 布局,则只会显示四个,另外两个会滚动。我 build 了这个 HorizontalScrollView包含 A 布局(因为 HorizontalScrollView 应该只有一个直接子级),现在我添加到布局 A 的 fill_parent 宽度被破坏了,因为它现在服从HorizontalScrollView所以 B 布局宽度也被破坏了,看看下面的数字:

-- 黄色:整个屏幕。

-- green :A 布局。

-- red :B 布局。

我得到的结果:

enter image description here

我想得到的结果:

enter image description here

我尝试设置 HorizontalScrollView 的宽度和布局 Afill_parent和/或 wrap_content但对我没有任何作用。

我的 XML 代码:

      <HorizontalScrollView 
                   android:layout_width="wrap_content"
                   android:layout_height="wrap_content" >
         <LinearLayout 
                       android:id="@+id/A"
                       android:layout_width="fill_parent"
                       android:layout_height="wrap_content"
                       android:orientation="horizontal"
                       android:weightSum="4" >

            <LinearLayout
                    android:id="@+id/B1"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:orientation="vertical"
                    android:weightSum="1" >

                    <LinearLayout
                        android:id="@+id/icon1"
                        android:layout_width="wrap_content"
                        android:layout_height="0dp"
                        android:layout_marginLeft="10dp"
                        android:layout_marginRight="5dp"
                        android:layout_marginTop="15dp"
                        android:layout_weight="0.5"
                        android:background="@drawable/ac_overlay"
                        android:orientation="horizontal"
                        android:tag="normal" >
                    </LinearLayout>

                    <LinearLayout
                        android:id="@+id/icon2"
                        android:layout_width="wrap_content"
                        android:layout_height="0dp"
                        android:layout_marginLeft="10dp"
                        android:layout_marginRight="5dp"
                        android:layout_marginTop="15dp"
                        android:layout_weight="0.5"
                        android:background="@drawable/ac_overlay"
                        android:orientation="horizontal"
                        android:tag="normal" >
                    </LinearLayout>
                </LinearLayout>
             <LinearLayout
                    android:id="@+id/B2"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:orientation="vertical"
                    android:weightSum="1" >

                    <LinearLayout
                        android:id="@+id/icon3"
                        android:layout_width="wrap_content"
                        android:layout_height="0dp"
                        android:layout_marginLeft="10dp"
                        android:layout_marginRight="5dp"
                        android:layout_marginTop="15dp"
                        android:layout_weight="0.5"
                        android:background="@drawable/ac_overlay"
                        android:orientation="horizontal"
                        android:tag="normal" >
                    </LinearLayout>

                    <LinearLayout
                        android:id="@+id/icon4"
                        android:layout_width="wrap_content"
                        android:layout_height="0dp"
                        android:layout_marginLeft="10dp"
                        android:layout_marginRight="5dp"
                        android:layout_marginTop="15dp"
                        android:layout_weight="0.5"
                        android:background="@drawable/ac_overlay"
                        android:orientation="horizontal"
                        android:tag="normal" >
                    </LinearLayout>
                  </LinearLayout>
                 </LinearLayout>
    </HorizontalScrollView>

最佳答案

你将无法仅从 xml 完成此操作,你需要一些动态代码来测量屏幕的宽度,然后以编程方式将每个线性布局(icon1、icon2 等)的宽度设置为 1/这个宽度的 4。

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(metrics.widthPixels/4, LayoutParams.MATCH_PARENT);

LinearLayout icon1 = (LinearLayout) findViewById(R.id.icon1);
icon1.setLayoutParams(params);

//etc

关于android - 如何在 Horizo​​ntalScrollView 中设置线性布局宽度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20858958/

相关文章:

android - GridLayout 列超出其范围

android - 对话框中的背景颜色显示不正确

android - 包含 10 个线性布局的 viewflipper 的最佳实践?

android - Universal Image Loader - 图片 URL 404 错误处理

Android MediaRecorder 启动失败-19

android - 光标 movetofirst() 和空指针异常

android - 如何在eclipse中导入com.android.support :design:23. 0.1

android - ScrollView 向下滚动并在点击 EditText 以获得焦点时突然向上滚动

两行的 Android RadioButtons

Android 线性布局权重以编程方式