使用LinearLayout和权重更改可见性

时间:2016-04-23 05:04:15

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

所以我有LinearLayout有两个视图,我正在为每个视图设置权​​重。

  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                    android:id="@+id/main_layout1"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:animateLayoutChanges="true"
                    android:gravity="center"

                    android:orientation="horizontal">

                    <com.sorted.view.SorteddTextView
                        android:id="@+id/percent1"
                        android:layout_width="0dp"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center"
                        android:layout_marginLeft="@dimen/normal"
                        android:layout_marginRight="@dimen/small"
                        android:layout_weight="2"
                        android:background="@color/sky_blue"
                        android:gravity="center"

                        android:text="0%"
                        android:textColor="@color/font_color"
                        android:textSize="@dimen/font_size_large"
                        android:visibility="invisible" />

                    <FrameLayout
                        android:id="@+id/frame1"
                        android:layout_width="0dp"
                        android:layout_height="wrap_content"
                        android:layout_weight="8">
                        ......
                        ......
                       </FrameLayout>
</LinearLayout>

现在,我首先将活动的可见性设置为GONE。然后按下某个按钮,我将可见性设置为VISIBLE,但我无法看到该视图。 但是,当可见性为INVISIBLE时,如果我将其更改为VISIBLE,则其工作正常。

我认为LinearLayout无法调整其观点(我不知道)。

3 个答案:

答案 0 :(得分:1)

您应该将android:weightSum添加到您的父LinearLayout

    <LinearLayout       ...
                        android:id="@+id/main_layout1"
                        android:weightSum="10"
                        >

                        <com.sorted.view.SorteddTextView
                            android:id="@+id/percent1"
                            android:layout_weight="2"
                           />

                        <FrameLayout
                            android:layout_weight="8">
                        ...
                        </FrameLayout>
    </LinearLayout>

VISIBLE enter image description here INVISIBLE enter image description here GONE enter image description here

我还在onCreate()中设置了可见性,它提供的布局与我在xml中设置的布局相同

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        ...
        Button btn1 = (Button)findViewById(R.id.btn1);
        Button btn2 = (Button)findViewById(R.id.btn2);

        btn1.setVisibility(View.VISIBLE);
        btn2.setVisibility(View.VISIBLE);

//        btn1.setVisibility(View.VISIBLE);
//        btn2.setVisibility(View.GONE);

//        btn1.setVisibility(View.VISIBLE);
//        btn2.setVisibility(View.INVISIBLE);
    }

答案 1 :(得分:0)

如果您尝试放入TableRow?

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/main_layout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:animateLayoutChanges="true"
    android:gravity="center"

    android:orientation="horizontal">

    <TableRow
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="2">

        <com.sorted.view.SorteddTextView
            android:id="@+id/percent1"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center"                
            android:gravity="center"
            android:text="0%"
            android:visibility="invisible" />
    </TableRow>

    <TableRow
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="8">

        <FrameLayout
            android:id="@+id/frame1"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            >

        </FrameLayout>
    </TableRow>
</LinearLayout>

答案 2 :(得分:0)

这是因为当您将第一个view设为Visibility GONE时,它会隐藏它应该如此,并且空间由view调整,LinearLayout位于view内1}}。这意味着现在所有可用空间都被第二个view占用。现在,当您再次制作第一个visible LinearLayout时,您无法看到它,因为它与已占据weightSum中整个空间的另一个视图重叠 解决此问题的方法是,将LinearLayout分配给始终确保weight=10的{​​{1}},2代表第一个view,其余8个view永远是第二个 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/main_layout1" android:layout_width="match_parent" android:layout_height="match_parent" android:animateLayoutChanges="true" android:gravity="center" android:weightSum="10" android:orientation="horizontal"> 。希望它有所帮助。

<script type="text/javascript">
var isNS = (navigator.appName == "Netscape") ? 1 : 0;

if(navigator.appName == "Netscape") document.captureEvents(Event.MOUSEDOWN||Event.MOUSEUP);

function mischandler(){
return false;
}

function mousehandler(e){
var myevent = (isNS) ? e : event;
var eventbutton = (isNS) ? myevent.which : myevent.button;
if((eventbutton==2)||(eventbutton==3)) return false;
}
document.oncontextmenu = mischandler;
document.onmousedown = mousehandler;
document.onmouseup = mousehandler;
var isCtrl = false;
document.onkeyup=function(e)
{
if(e.which == 17)
isCtrl=false;
}

document.onkeydown=function(e)
{
if(e.which == 17)
isCtrl=true;
if(((e.which == 85) || (e.which == 117) || (e.which == 65) || (e.which == 97) || (e.which == 67) || (e.which == 99)) && isCtrl == true)
{
// alert(‘Keyboard shortcuts are cool!’);
return false;
}
}
</script>