无法显示隐藏的RelativeLayout

时间:2017-10-09 16:32:37

标签: android xml android-layout

我有一个带有一个NavigationView和两个不同RelativeLayouts的xml。 最初隐藏其中一个RelativeLayouts(我将onCreate()中的可见性更改为GONE)。 当我单击NavigationView内的按钮时,我希望隐藏的布局变得可见。

这是我的Java代码:

RelativeLayout imagenes,registro;

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_invitado);

    registro = (RelativeLayout) findViewById(R.id.registro);
    imagenes = (RelativeLayout) findViewById(R.id.imagenes);

    registro.setVisibility(View.INVISIBLE);
    imagenes.setVisibility(View.VISIBLE);


    mDrawerlayout= (DrawerLayout) findViewById(R.id.drawer_layout);
    mToggle= new ActionBarDrawerToggle(this,mDrawerlayout,R.string.open,R.string.close);
    mDrawerlayout.addDrawerListener(mToggle);
    mToggle.syncState();
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);

    }

public void registrarse(View v){

    mDrawerlayout.closeDrawers();

    registro.setVisibility(View.VISIBLE);

}

这里是xml:

    <?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="#fff">


    <android.support.design.widget.NavigationView
        app:headerLayout="@layout/popup_header"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        app:menu="@menu/popup_menu"
        android:layout_gravity="start">

    </android.support.design.widget.NavigationView>

    <RelativeLayout
        android:id="@+id/imagenes"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <ImageView
            android:id="@+id/imageView2"
            android:layout_marginTop="50dp"
            android:layout_width="200dp"
            android:layout_height="200dp"
            android:layout_centerHorizontal="true"
            android:src="@drawable/cloud"
            android:layout_gravity="center"
            android:contentDescription="" />

    </RelativeLayout>

    <RelativeLayout
        android:id="@+id/registro"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#80FF4081">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/registrate"
            android:textAlignment="center"
            android:textColor="@color/white"
            android:textSize="26sp"
            android:textStyle="bold"
            android:id="@+id/textView"
            android:layout_alignParentTop="true"
            android:layout_alignParentStart="true"
            android:layout_marginTop="12dp" />

        <EditText
            android:id="@+id/email"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="26dp"
            android:ems="10"
            android:gravity="center_horizontal"
            android:hint="@string/email"
            android:inputType="textEmailAddress"
            android:layout_below="@+id/textView"
      android:layout_alignParentStart="true" />


    </RelativeLayout>


</android.support.v4.widget.DrawerLayout>

3 个答案:

答案 0 :(得分:0)

由于您已将RelativeLayout的高度和宽度设置为View.VISIBLE,因此您将RelativeLayout的可见性更改为match_parent后才会看到imagenes,所以registro占据整个屏幕,位于ScrollView之上。

尝试将它们放在registro.bringToFront()内或调整其高度,或在将其显示后调用UnsafePointer

答案 1 :(得分:0)

imagenes RelativeLayout的高度和宽度与父级匹配,因此需要整个屏幕..我需要设置适当的高度以查看registro RelativeLayout或将其放入{ {1}}

答案 2 :(得分:0)

我可以修复你的代码。

1 - 修复DrawerLayout

createObject()布局文件必须具有特定格式:

DrawerLayout

您有2 <DrawerLayout> <Content Layout /> <!-- It can be linearlayout, framelayout etc --> <NavigationView /> </DrawerLayout> 个和RelativeLayout。您拥有的物品多于允许的物品且订单错误。因此,对于测试,我将NavigationViewimagenes移动到了一个LinearLayout`中(您可以改进并保留所有项目只在一个相对布局中......但是让我们再留一次)。

我没有更改任何内容...我只是将registro移到文件底部,将NavigationView移到RelativeLayout

LinearLayout

2 - 修复您的代码

由于两个<?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.DrawerLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <RelativeLayout android:id="@+id/imagenes" ... > .... </RelativeLayout> <RelativeLayout ...> ..... </RelativeLayout> </LinearLayout> <android.support.design.widget.NavigationView .... /> </android.support.v4.widget.DrawerLayout> 都放在RelativeLayout中且垂直对齐,LinearLayout对我们来说无效。因此,您应该使用View.INVISBLE并按如下方式更改代码:

View.Gone

3 - 另一个可能性

由于您的@Override protected void onCreate(Bundle savedInstanceState) { .... imagenes.setVisibility(View.VISIBLE); registro.setVisibility(View.GONE); .... } public void registrarse(View v){ mDrawerlayout.closeDrawers(); imagenes.setVisibility(View.GONE); registro.setVisibility(View.VISIBLE); } 未正确配置,我想知道您的导航项是否正在被调用。所以,也许,你的代码甚至没有调用DrawerLayout ..但是,但是很难用当前的代码附加。

对于任何情况,根据我上面提到的修改,如果您的代码正确调用registrarse(View v),它应该正常工作。