添加layout_weight时,Android视图不可见

时间:2019-05-16 01:07:06

标签: android android-linearlayout android-layout-weight

我正在尝试使用线性布局中的四个线性布局将屏幕拆分为不同的尺寸。当我向项目添加权重时,它会在屏幕上显示布局在布局预览中分为4个均匀的部分。但是,当我在设备或仿真器上运行该应用程序时,视图不会显示。但是,当我删除权重属性时,将显示视图。

我使用的代码示例成功使用了weight属性,但不适用于我的程序。我还以编程方式获取了代码中所有子视图的宽度和高度。它们不是null,因此它们在那里但只是不可见。我试过添加像能见度= true和focusable = true这样的属性,但无济于事。我已使用此代码向视图添加了drawView

DrawView drawView = new DrawView();
ViewGroup mainLayout = (ViewGroup) findViewById(R.id.main);
mainLayout.addView(drawView);

DrawView是扩展View的类,我将方法canvas.drawLine()和canvas.drawText()调用到屏幕上


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:weightSum="4">

    <LinearLayout
        android:visibility="visible"
        android:focusable="true"
        android:id="@+id/l1"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:background="@color/colorAccent"
        android:orientation="horizontal"></LinearLayout>
    <LinearLayout
        android:visibility="visible"
        android:id="@+id/l2"
        android:orientation="horizontal"
        android:layout_weight="1"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:background="@color/colorBtnText"></LinearLayout>
    <LinearLayout
        android:id="@+id/l3"
        android:orientation="horizontal"
        android:layout_weight="1"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:background="@color/colorBtnBackground"></LinearLayout>
    <LinearLayout
        android:id="@+id/l4"
        android:orientation="horizontal"
        android:layout_weight="1"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:background="@color/colorLbl"></LinearLayout>

</LinearLayout>

我在上面尝试的所有方法都没有用。我在此上花了很多时间,非常感谢您的反馈。

2 个答案:

答案 0 :(得分:0)

我认为DrawView需要setLayoutParams(LinearLayout.LayoutParams)才能添加到LinearLayout中,并通过LayoutParams设置固定的高度或重量。如果不这样做,则DrawView的高度为MATCH_PARENT,这将使其他视图的高度为0。

您可以尝试以下操作:

DrawView drawView = new DrawView();
LinearLayout mainLayout = (LinearLayout) findViewById(R.id.main);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT,0, 1); // or new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT,100); to set fixed height
mainLayout.addView(drawView, params);

如果有效,我认为最好的方法是DrawView覆盖onMeasure方法,并计算高度本身。

答案 1 :(得分:0)

如您所见,您将xml文件中的“ android:weightSum”设置为4。虽然它在主要线性布局下仍具有4个子代,但代码未显示任何错误。但是,当您运行代码时,会以编程方式向主线性布局中添加另一个视图,该视图超出了主布局的权重之和。

所以,我的建议是,您可以尝试从xml布局中删除android:weightSum =“ 4”属性,这样它将自动根据其权重计算布局大小。