【问题标题】:RelativeLayout refresh after view.setVisibility(View.GONE) and view.setVisibility(View.VISIBLE)在 view.setVisibility(View.GONE) 和 view.setVisibility(View.VISIBLE) 之后刷新 RelativeLayout
【发布时间】:2013-06-28 05:59:40
【问题描述】:

请看下图来理解问题:

如您所见,有一个 RelativeLayout 包含一个自定义 View 和一个 LinearLayout
在它们之间,还有另一个View,其中Visibility设置为GONE。 现在,当我按下Button 时,我想将GONE 视图的可见性更改为VISIBLE,并重新排列RelativeLayout,以便第三个View 介于自定义View 和@ 之间987654334@。当我按下另一个按钮时,我想让第三个视图再次消失。我怎样才能做到这一点?

这是我的 XML:

<view
    android:id="@+id/CanvasView"
    android:layout_width="200dp"
    android:layout_height="40dp"
    android:layout_above="@+id/HorizontalScrollView"
    android:layout_centerHorizontal="true"
    android:layout_margin="0dp"
    android:layout_marginBottom="0dp"
    android:layout_marginTop="0dp"
    class="com.example.CanvasView"
    android:orientation="vertical" />

<HorizontalScrollView
    android:id="@+id/HorizontalScrollView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_above="@+id/linearLayout2"
    android:clickable="false"
    android:focusable="false"
    android:focusableInTouchMode="false"
    android:visibility="gone" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:clickable="false"
        android:focusable="false"
        android:focusableInTouchMode="false"
        android:orientation="horizontal" >

    //SOME BUTTONS HERE
    </LinearLayout>

</HorizontalScrollView>

<LinearLayout
    android:id="@+id/linearLayout2"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_marginTop="5dp" >

    <Button
        android:id="@+id/button1"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical|center_horizontal"
        android:layout_weight="0.4"
        android:maxWidth="200dp"
        android:text="Clear"
        android:textColor="@android:color/white"
        android:textSize="20sp" />

    <Button
        android:id="@+id/settingsButton"
        android:layout_width="44dp"
        android:layout_height="44dp"
        android:layout_gravity="center_vertical|center_horizontal"
        android:background="@drawable/settings_button_selector" />

    <Button
        android:id="@+id/button2"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical|center_horizontal"
        android:layout_weight="0.4"
        android:enabled="false"
        android:maxWidth="200dp"
        android:text="Recognize"
        android:textColor="@android:color/white"
        android:textSize="20sp" />

</LinearLayout>

如果我只在 OnClick() 方法中设置第三个视图的可见性,它会出现在 LinearLayout 上方,并且会覆盖自定义视图(我之前尝试过)。换句话说,它不会向上移动RelativeLayout。

【问题讨论】:

    标签: java android layout visibility android-relativelayout


    【解决方案1】:

    在您的活动中,onClick()GONE 视图的实例获取到 View.VISIBLE 以便它重新出现在两个视图之间。

     viewName.setVisibility(View.VISIBLE);
    

    为此,VIEW 之间应该已经存在于 xml 中,只是默认情况下它是 GONE

    【讨论】:

    • 这将使第三个视图出现在 LinearLayout 上方,并将覆盖自定义视图(我之前尝试过)。换句话说,它不会向上移动RelativeLayout。
    • @Marek 我不明白你的意思。你说的是哪个RelativeLayout...父布局???
    • 我的意思是您的解决方案将不起作用。我想要的是在自定义 View 和 LinearLayout 之间放置第三个 View,这样 RelativeLayout 会向上移动,在它下方会出现第三个 Layout。
    • 你能不能用一个 linerlayout 代替你的相对布局,然后你的第三个视图的 wrapcontent 高度应该可以实现这个
    【解决方案2】:
    findViewById(R.id.button1).setOnClickListener(new OnClickListener(){
         public void onClick(View v) {
             findViewById(R.id.hiddenview).setVisibility(View.GONE);
             findViewById(R.id.relativelayout).invalidate();
         }
    });
    findViewById(R.id.button2).setOnClickListener(new OnClickListener(){
         public void onClick(View v) {
             findViewById(R.id.hiddenview).setVisibility(View.VISIBLE);
             findViewById(R.id.relativelayout).invalidate();
         }
    });
    

    【讨论】:

    • RelativeLayout没有repaint()方法
    • invalidate 也不生效。似乎自定义 View 被粘在了 LinearLayout 上……还有其他想法吗?
    • 当您在界面设计器中更改可见性时,视图是否符合您的预期?如果不是,请检查以确保您的自定义视图取决于隐藏视图的位置
    • 你是对的。我刚刚发现了问题。我在硬编码: layoutParams.addRule(RelativeLayout.ABOVE, R.id.linearLayout2); canvasView.setLayoutParams(layoutParams);我不得不将其更改为 layoutParams.addRule(RelativeLayout.ABOVE, R.id.CandidatesHorizo​​ntalScrollView);
    猜你喜欢
    • 1970-01-01
    • 2012-06-14
    • 2013-10-06
    • 2013-04-17
    • 2020-02-15
    • 2015-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多