首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ScrollView重叠

ScrollView重叠
EN

Stack Overflow用户
提问于 2014-11-17 04:32:03
回答 1查看 1.1K关注 0票数 0

我正在建造一个简单的屏幕。屏幕上有两个按钮:登录和注册。一旦用户单击“登录”,我将加载一个布局,其中包含两个要输入凭据的编辑文本字段、一个继续登录的按钮和一个返回启动屏幕的cancel按钮。登录布局是在滚动视图中编写的。但是,当我单击“取消”按钮时,滚动视图似乎仍然存在。我试图设置滚动视图的可见性,但这使我的应用程序崩溃了。我试图设置不可见性,这也会使我的应用程序崩溃。我做了很多谷歌搜索,似乎没有解决办法。

代码语言:javascript
复制
package com.praveen.loginregi.app;

import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.ScrollView;


public class MainActivity extends ActionBarActivity implements View.OnClickListener{
    Button signin;
    Button signup;
    Button cancel;
    Button signincancel;

    RelativeLayout login,register;
    LinearLayout fromsignin,selectsingn,fromactvitysignup;
    ScrollView sc;
    ScrollView sc1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        signin=(Button)findViewById(R.id.btnSingIn);
        signup=(Button)findViewById(R.id.btnSignUp);
        login=(RelativeLayout)findViewById(R.id.rl);
        register=(RelativeLayout)findViewById(R.id.rl1);
        cancel=(Button)findViewById(R.id.btncancel);
        signincancel=(Button)findViewById(R.id.btnSingIncancel);
        sc=(ScrollView)findViewById(R.id.sc);
        sc1=(ScrollView)findViewById(R.id.sc1);

        fromsignin=(LinearLayout)findViewById(R.id.from_actvity_sign_in);
        selectsingn=(LinearLayout)findViewById(R.id.selectsingn);
        fromactvitysignup =(LinearLayout)findViewById(R.id.from_actvity_sign_up);
        signin.setOnClickListener(this);
        signup.setOnClickListener(this);
        cancel.setOnClickListener(this);
        signincancel.setOnClickListener(this);

        selectsingn.setVisibility(View.VISIBLE);



    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btnSignUp:

                System.out.println("hhhijoihhohouhouhhhjhjhkkhgjgggjghjhgjhhhg");


                selectsingn.setVisibility(View.INVISIBLE);
                selectsingn.setVisibility(View.GONE);




                register.setVisibility(View.VISIBLE);
                fromactvitysignup.setVisibility(View.VISIBLE);
                Animation ani2 = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.slide_down);
                fromactvitysignup.startAnimation(ani2);




                return;


        case R.id.btnSingIn:
                System.out.println("djksfhjksdhdjkfhskjdhdskfjhfdkjhfksdjdfshkj");


                selectsingn.setVisibility(View.INVISIBLE);

                login.setVisibility(View.INVISIBLE);


                selectsingn.setVisibility(View.GONE);



                fromsignin.setVisibility(View.VISIBLE);
                login.setVisibility(View.VISIBLE);

                Animation ani = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.slide_down);
                fromsignin.startAnimation(ani);
                return;

            case R.id.btncancel:




                register.setVisibility(View.INVISIBLE);
                register.setVisibility(View.GONE);
                fromactvitysignup.setVisibility(View.GONE);

                selectsingn.setVisibility(View.VISIBLE);
                sc1.setVisibility(View.INVISIBLE);




                return;

            case R.id.btnSingIncancel:


                login.setVisibility(View.INVISIBLE);
                login.setVisibility(View.GONE);


                selectsingn.setVisibility(View.VISIBLE);
                fromsignin.setVisibility(View.VISIBLE);



                return;

            default:
                selectsingn.setVisibility(View.GONE);
                fromsignin.setVisibility(View.GONE);
                register.setVisibility(View.GONE);
                fromactvitysignup.setVisibility(View.GONE);


        }

    }
}

XML主布局

代码语言:javascript
复制
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                xmlns:tools="http://schemas.android.com/tools"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:paddingBottom="@dimen/activity_vertical_margin"
                android:paddingLeft="@dimen/activity_horizontal_margin"
                android:paddingRight="@dimen/activity_horizontal_margin"
                android:paddingTop="@dimen/activity_vertical_margin"
                tools:context=".MainActivity"
                android:background="@drawable/fire_logo">



    <LinearLayout
            android:id="@+id/from_actvity_sign_in"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:visibility="gone">

        <include
                android:id="@+id/myid2"
                layout="@layout/activity_sign_in" />
    </LinearLayout>


    <LinearLayout
            android:id="@+id/from_actvity_sign_up"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:visibility="gone">

        <include
                android:id="@+id/myid3"
                layout="@layout/activity_sign_up_screen" />
    </LinearLayout>


    <LinearLayout
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:background="@drawable/linearlayout_bg"
            android:id="@+id/selectsingn"
            android:padding="10dp"
            android:visibility="gone"
            >

        <Button
                android:id="@+id/btnSignUp"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:padding="10dp"
                android:layout_margin="4dp"
                android:text="Sign Up"
                android:background="@drawable/button_default_bg"
                style="@style/DefaultButtonText"
                />
        <Button
                android:id="@+id/btnSingIn"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:padding="10dp"
                android:layout_margin="4dp"
                android:text="Sign In"
                style="@style/DefaultButtonText"
                android:background="@drawable/button_default_bg"
                />
    </LinearLayout>

</RelativeLayout>




 Signin Layout/Signup Layout

<

代码语言:javascript
复制
?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#80000000" android:fillViewport="false" android:id="@+id/sc">


    <RelativeLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:paddingBottom="@dimen/activity_vertical_margin"
            android:paddingLeft="@dimen/activity_horizontal_margin"
            android:paddingRight="@dimen/activity_horizontal_margin"
            android:paddingTop="@dimen/activity_vertical_margin"
            android:id="@+id/rl"
            android:gravity="center"
            android:layout_gravity="center"
            android:orientation="vertical"
            android:background="#ffffff">

        <LinearLayout
                android:orientation="vertical"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                android:padding="10dp"
                android:gravity="center_vertical"
                >

            <EditText
                    android:id="@+id/etUserName"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:background="@drawable/edittext_top_bg"
                    android:padding="10dp"
                    android:hint="Email"
                    android:textColorHint="#cccccc"/>
            />/  android:drawableLeft="@drawable/email"/>
            <EditText
                    android:id="@+id/etPass"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:background="@drawable/edittext_bottom_bg"
                    android:layout_marginTop="-2dp"
                    android:padding="10dp"
                    android:hint="Password"
                    android:textColorHint="#cccccc"
                    android:password="true"/>
            />/  android:drawableLeft="@drawable/password"/>
            <Button
                    android:id="@+id/btnSingIns1"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:padding="10dp"
                    android:layout_margin="4dp"
                    android:text="Sign In"
                    style="@style/DefaultButtonText"
                    android:background="@drawable/button_default_bg"
                    />
            <Button
                    android:id="@+id/btnSingIncancel"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:padding="10dp"
                    android:layout_margin="4dp"
                    android:text="Cancel"
                    style="@style/DefaultButtonText"
                    android:background="@drawable/button_default_bg"
                    />
        </LinearLayout>

    </RelativeLayout>
</ScrollView>

我有相同的xml代码来注册,但是有相应的变量。

代码语言:javascript
复制
       My logcat



        java.lang.NullPointerException
        at com.praveen.loginregi.app.MainActivity.onClick(MainActivity.java:203)
        at android.view.View.performClick(View.java:4204)
        at android.view.View$PerformClick.run(View.java:17355)
        at android.os.Handler.handleCallback(Handler.java:725)
        at android.os.Handler.dispatchMessage(Handler.java:92)
        at android.os.Looper.loop(Looper.java:137)
        at android.app.ActivityThread.main(ActivityThread.java:5041)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:511)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
        at dalvik.system.NativeStart.main(Native Method)

注册Xml

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#80000000"
            android:id="@+id/sc1"
        >
    <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:paddingBottom="@dimen/activity_vertical_margin"
            android:paddingLeft="@dimen/activity_horizontal_margin"
            android:paddingRight="@dimen/activity_horizontal_margin"
            android:paddingTop="@dimen/activity_vertical_margin"
            android:id="@+id/rl1"
            android:background="#ffffff"
            android:layout_gravity="center" >

        <LinearLayout
                android:orientation="vertical"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                android:padding="10dp"
                >

            <EditText
                    android:id="@+id/etEmail"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:background="@drawable/edittext_top_bg"
                    android:padding="10dp"
                    android:hint="Email"
                    android:textColorHint="#bbbbbb"
                    />
            />/ android:drawableLeft="@drawable/email"/>
            <EditText
                    android:id="@+id/etUserName"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:background="@drawable/edittext_default_bg"
                    android:layout_marginTop="-2dp"
                    android:padding="10dp"
                    android:hint="User Name"
                    android:textColorHint="#bbbbbb"
                    />
            />/  android:drawableLeft="@drawable/user"/>
            <EditText
                    android:id="@+id/etPass"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:background="@drawable/edittext_bottom_bg"
                    android:layout_marginTop="-2dp"
                    android:padding="10dp"
                    android:hint="Password"
                    android:textColorHint="#bbbbbb"
                    android:password="true"/>
            //android:drawableLeft="@drawable/password"/>
            <Button
                    android:id="@+id/btnSignUpp"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:padding="10dp"
                    android:layout_margin="4dp"
                    android:text="Sign Up"
                    style="@style/DefaultButtonText"
                    android:background="@drawable/button_default_bg"
                    />


            <Button
                    android:id="@+id/btncancel"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:padding="10dp"
                    android:layout_margin="4dp"
                    android:text="cancel"
                    style="@style/DefaultButtonText"
                    android:background="@drawable/button_default_bg"
                    />
        </LinearLayout>

    </RelativeLayout>
</ScrollView>
EN

回答 1

Stack Overflow用户

发布于 2014-11-18 07:42:16

简短回答:

您的问题是您正在更改@+id/rl1的可见性,这是RelativeLayout嵌套在activity_sign_in.xml中的ScrollView中,所以当您单击cancel并使RelativeLayout不可见时,具有半透明背景的Scrollview仍然是可见的。

我认为最简单的解决方案是使用您在包含标记(变量fromsignin)中定义的id来打开/关闭可见性。

更长的答案:

看一下您的布局,我不明白为什么不使用Dialog来显示sign_in,因为您实际上使用ScrollView来使背景变暗,然后在RelativeLayout中嵌套LinearLayout。老实说,我不明白为什么需要所有这些结构,您可以很容易地通过将sign_in显示为Dialog内容并从布局中删除ScrollViewRelativeLayout来实现同样的效果。由于我没有动画文件,我只是没有使用它,所以也许这就是你使用这个结构的原因,但是RelativeLayout对我来说似乎是无用的,因为你可以用重力标记来居中。

编辑:我刚刚测试了这个,你的源代码和布局都很好。将fromsigninR.id.btnSingIncancel的开关箱中的可见性从可见更改为消失

代码语言:javascript
复制
case R.id.btnSingIncancel:
                login.setVisibility(View.INVISIBLE);  //this can be deleted
                login.setVisibility(View.GONE);       //this too, and redundant as well.
                selectsingn.setVisibility(View.VISIBLE);
                fromsignin.setVisibility(View.GONE);    //This line is the important one!
                return;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26965564

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档