【问题标题】:ScrollView Overlapping滚动视图重叠
【发布时间】:2014-11-17 04:32:03
【问题描述】:

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

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 主布局

<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

?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 代码,但有相应的变量

       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

<?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>

【问题讨论】:

  • 请在此处添加您的 xml 代码
  • 发布您的 xml 文件..!!
  • 请尝试 post xml 以及 logcat。
  • 您的文件无法编译,缺少一些东西:R.id.btncancel R.id.rl1 R.id.sc1
  • Sc1 在我的其他 xml 文件中注册,这是我在 xml 文件中的登录...。我没有发布它,因为它是相同的代码

标签: android android-layout button scrollview splash-screen


【解决方案1】:

简答:

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

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

更长的答案:

查看您的布局,我不明白您为什么不直接使用Dialog 来显示登录,因为您实际上使用ScrollView 使背景变暗,然后在a 中嵌套LinearLayout RelativeLayout。老实说,我不明白为什么需要所有这些结构,您可以通过将 sign_in 显示为 Dialog 内容并从布局中删除 ScrollViewRelativeLayout 来轻松实现相同的效果。 由于我没有动画文件,我只是没有使用它,所以也许这就是你使用这种结构的原因,RelativeLayout 对我来说仍然没用,因为你可以用重力标签居中。

编辑: 我刚刚对此进行了测试,它适用于您的源代码和布局。 将 R.id.btnSingIncancel 的开关盒中的 fromsignin 可见性从 VISIBLE 更改为 GONE

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;

【讨论】:

  • 感谢 momo 的回复,但nope hide fromsign 不起作用,我在 google 中查找了 Dialog,代码似乎更乏味 developer.android.com/guide/topics/ui/dialogs.html....please 建议我在这种情况下使用解决方案
  • 我添加了例子,检查一下;-)
  • 否 :( 我已经试过了,又试了一次......如果你点击取消,背景会被滚动视图填满,启动画面-> sigin-> 取消启动画面-> 注册->取消启动画面-> sigin-> 切换登录时无法访问任何按钮我无法单击任何按钮,滚动视图会阻止它
猜你喜欢
  • 1970-01-01
  • 2015-09-11
  • 1970-01-01
  • 2015-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多