Android EditText不会再次出现在同一位置

成型

我正在使用Android上的信用卡/借记卡表格。

我想要达到的目标:

我有一个EditText名为CardNumber用户应该在其中键入他/她的卡号字段收到卡号的所有数字后,两个附加EditText字段ExpiryDateCVV滑出。如果用户删除了该CardNumber字段中的任何数字,则ExpiryDateCVV字段应该消失或滑入并删除其中所写的文本。

当用户CardNumber再次输入&并输入所需的所有数字时,两个ExpiryDateCVV都应再次出现在以前显示的相同位置

但这就是我得到的

在此处输入图片说明

它们不在同一位置出现。如何实现这一目标与如何从两个删除文本ExpiryDateCVV在他们消失。

这是我到目前为止所做的

MainActivity.java

import android.content.pm.ActivityInfo;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.view.KeyEvent;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.EditText;

import java.security.Key;

public class MainActivity extends AppCompatActivity {

    private EditText cardNumber, expiryDate, CVV, nameOnCard;

    private boolean flag = false;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED);//Locks the screen orientation
        init(); //Initializes the variables

        typefunc();

    }

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

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    public void init()
    {
        cardNumber = (EditText) findViewById(R.id.cardNumber); //Field for storing the card number
        expiryDate = (EditText) findViewById(R.id.expiryDate); //For storing the Expiry Date
        CVV = (EditText) findViewById(R.id.CVV); //For storing the CVV
        nameOnCard = (EditText) findViewById(R.id.nameOnCard); //For storing the name of the Cardholder
    }

    public void typefunc()
    {

        //FORMATTING CARD NUMBER FIELD
        cardNumber.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after)
            {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count)
            {
                if(s.length()==19)
                {
                    //MAKING EXPIRY DATE VISIBLE & PUTTING FOCUS ON IT
                    expiryDate.setVisibility(View.VISIBLE);
                    expiryDate.requestFocus();

                    //SLIDE OUT ANIMATION (FADE IN --> FADE OUT)
                    expiryDate.setAlpha(0.0f);//(INVISIBLE)
                    expiryDate.animate().translationY(expiryDate.getHeight()).alpha(1.0f);//(VISIBLE)



                    //MAKING CVV VISIBLE
                    CVV.setVisibility(View.VISIBLE);

                    //SLIDE OUT ANIMATION (FADE IN --> FADE OUT)
                    CVV.setAlpha(0.0f); //(INVISIBLE)
                    CVV.animate().translationY(CVV.getHeight()).alpha(1.0f); //(VISIBLE)


                }
                if(s.length()<19)
                {
                    //DISAPPEARING THE EXPIRY DATE 7 CVV
                    expiryDate.setVisibility(View.GONE);
                    CVV.setVisibility(View.GONE);

                    //CLEARING THE FOCUS
                    expiryDate.clearFocus();

                    //SLIDE IN ANIMATION (FADE OUT --> FADE IN)
                    expiryDate.animate().translationY(0).alpha(0.0f);
                    CVV.animate().translationY(0).alpha(0.0f);




                }

            }

            @Override
            public void afterTextChanged(Editable s)
            {
                char space = ' ';

                if(s.length()>0 && (s.length()%5) == 0)
                {
                    char  c = s.charAt(s.length()-1);
                    if(Character.isDigit(c))
                    {
                        s.insert(s.length()-1,String.valueOf(space));
                    }
                }
            }
        });

        //FORMATTING THE EXPIRY DATE FIELD
        expiryDate.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count)
            {
                if(s.length()==5)
                    CVV.requestFocus();
            }

            @Override
            public void afterTextChanged(Editable s)
            {
                char slash = '/';
                if(s.length()>0 && (s.length()%3) == 0)
                {
                    char c = s.charAt(s.length()-1);
                    if(Character.isDigit(c))
                        s.insert(s.length()-1,String.valueOf(slash));
                }
            }
        });

        CVV.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count)
            {
                if(s.length()==3) {
                    nameOnCard.setVisibility(View.VISIBLE);


                }
            }

            @Override
            public void afterTextChanged(Editable s)
            {
                if(s.length()==3)
                    nameOnCard.requestFocus();
            }
        });
    }

}

content_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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: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"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context="payment.ec.juspay.in.cardform.MainActivity"
    tools:showIn="@layout/activity_main">


    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="Credit / Debit"
        android:id="@+id/cardformHeading"
        android:layout_marginLeft="42dp"
        android:layout_marginStart="30dp"
        android:layout_marginTop="20dp"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

    <EditText
        android:layout_width="300dp"
        android:layout_height="wrap_content"
        android:inputType="phone"
        android:id="@+id/cardNumber"
        android:maxLength="20"
        android:hint="Card Number"
        android:layout_below="@+id/cardformHeading"
        android:layout_alignLeft="@+id/cardformHeading"
        android:layout_alignStart="@+id/cardformHeading"
        android:layout_marginTop="32dp"
        android:singleLine="true"/>

    <EditText
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:id="@+id/expiryDate"
        android:hint="Expiry Date (mm/yy)"
        android:maxLength="5"
        android:inputType="phone"
        android:layout_below="@+id/cardNumber"
        android:layout_alignLeft="@+id/cardNumber"
        android:layout_alignStart="@+id/cardNumber"
        android:singleLine="true"
        android:visibility="gone"/>

    <EditText
        android:layout_width="80dp"
        android:layout_height="wrap_content"
        android:inputType="numberPassword"
        android:ems="10"
        android:maxLength="3"
        android:id="@+id/CVV"
        android:hint="CVV"
        android:layout_below="@+id/cardNumber"
        android:layout_alignRight="@+id/cardNumber"
        android:layout_alignEnd="@+id/cardNumber"
        android:singleLine="true"
        android:visibility="gone"/>

    <EditText
        android:layout_width="300dp"
        android:layout_height="wrap_content"
        android:id="@+id/nameOnCard"
        android:hint="Name On Card"
        android:layout_below="@+id/expiryDate"
        android:layout_alignLeft="@+id/expiryDate"
        android:layout_alignStart="@+id/expiryDate"
        android:singleLine="true"
        android:visibility="gone"/>

</RelativeLayout>

我想念什么?

感谢您的时间!!

杰克特曼

您可能不想翻译EditText,因为这就是为什么它在屏幕上的位置比想要的低。

无论如何,如果您要使用翻译动画,则必须使用View.INVISIBLE而不是View.GONE,否则初始getHeight()将返回0。对于s.length()== 19,还需要转换为0,并-expiryDate.getHeight()的s.length()<19

if(s.length()==19)
{
     //MAKING EXPIRY DATE VISIBLE & PUTTING FOCUS ON IT
     expiryDate.setVisibility(View.VISIBLE);
     expiryDate.requestFocus();

     //SLIDE OUT ANIMATION (FADE IN --> FADE OUT)
     expiryDate.setAlpha(0.0f);//(INVISIBLE)
     expiryDate.animate().translationY(0).alpha(1.0f);//(VISIBLE)



     //MAKING CVV VISIBLE
     CVV.setVisibility(View.VISIBLE);

     //SLIDE OUT ANIMATION (FADE IN --> FADE OUT)
     CVV.setAlpha(0.0f); //(INVISIBLE)
     CVV.animate().translationY(0).alpha(1.0f); //(VISIBLE)
}
else if(s.length()<19 && expiryDate.getVisibility() == View.VISIBLE)
{
    //DISAPPEARING THE EXPIRY DATE 7 CVV
    expiryDate.setVisibility(View.INVISIBLE);
    CVV.setVisibility(View.INVISIBLE);

    //CLEARING THE FOCUS
    expiryDate.clearFocus();

    //SLIDE IN ANIMATION (FADE OUT --> FADE IN)
    expiryDate.animate().translationY(-expiryDate.getHeight()).alpha(0.0f);
    CVV.animate().translationY(-CVV.getHeight()).alpha(0.0f);
}

另外,您可能希望像这样在您的init方法中向上转换视图

expiryDate.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
    @Override
    public boolean onPreDraw() {
        expiryDate.animate().translationY(-expiryDate.getHeight());
        expiryDate.getViewTreeObserver().removeOnPreDrawListener(this);
        return true;
    }
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

UIView 动画 - 动画正确,但再次出现在同一位置时

来自分类Dev

如何使不同的div出现在同一位置?

来自分类Dev

如果单击两次,如何使 JButton 生成的文本重新出现在同一位置?

来自分类Dev

Android:Fragment和ViewPager始终从第一位置开始

来自分类Dev

Android:Fragment和ViewPager始终从第一位置开始

来自分类Dev

ImageView永远不会出现在Android LinearLayout中

来自分类Dev

Android:TextView不会出现在ListView下方

来自分类Dev

点击一个元素会触发点击出现在移动Safari上同一位置的另一个元素(重击)

来自分类Dev

Android自定义列表视图在第一位置显示最后一项

来自分类Dev

在 Android 中,如何在具有不同分辨率的另一个屏幕上的同一位置绘制一条线?

来自分类Dev

如何让一个包再次出现在未来的堆栈 LTS 快照中?

来自分类Dev

如何使查找栏再次出现在底部?

来自分类Dev

当键盘出现在Android上时,如何防止EditText自动滚动?

来自分类Dev

如何允许EditText中的第一位数字为零(Android)

来自分类Dev

getView()多次调用同一位置

来自分类Dev

标识同一位置的所有节点

来自分类Dev

使段落缩进同一位置

来自分类Dev

将多个图像放置在同一位置

来自分类Dev

使div在单击时显示在同一位置

来自分类Dev

如何使按钮保持在同一位置?

来自分类Dev

同一位置上的双重div

来自分类Dev

角度更换面板在同一位置

来自分类Dev

徽标不在同一位置

来自分类Dev

使用jQuery在同一位置显示项目

来自分类Dev

如何保持文字在同一位置?

来自分类Dev

希望p保持在同一位置

来自分类Dev

如何使蓝色的位置点出现在我的Android应用程序中?

来自分类Dev

如果ID再次出现在另一行上,则过滤包含关键字和ID的行

来自分类Dev

稀有的画布副本出现在屏幕的另一部分,而不会降低性能。Android,Phonegap,JQM

Related 相关文章

  1. 1

    UIView 动画 - 动画正确,但再次出现在同一位置时

  2. 2

    如何使不同的div出现在同一位置?

  3. 3

    如果单击两次,如何使 JButton 生成的文本重新出现在同一位置?

  4. 4

    Android:Fragment和ViewPager始终从第一位置开始

  5. 5

    Android:Fragment和ViewPager始终从第一位置开始

  6. 6

    ImageView永远不会出现在Android LinearLayout中

  7. 7

    Android:TextView不会出现在ListView下方

  8. 8

    点击一个元素会触发点击出现在移动Safari上同一位置的另一个元素(重击)

  9. 9

    Android自定义列表视图在第一位置显示最后一项

  10. 10

    在 Android 中,如何在具有不同分辨率的另一个屏幕上的同一位置绘制一条线?

  11. 11

    如何让一个包再次出现在未来的堆栈 LTS 快照中?

  12. 12

    如何使查找栏再次出现在底部?

  13. 13

    当键盘出现在Android上时,如何防止EditText自动滚动?

  14. 14

    如何允许EditText中的第一位数字为零(Android)

  15. 15

    getView()多次调用同一位置

  16. 16

    标识同一位置的所有节点

  17. 17

    使段落缩进同一位置

  18. 18

    将多个图像放置在同一位置

  19. 19

    使div在单击时显示在同一位置

  20. 20

    如何使按钮保持在同一位置?

  21. 21

    同一位置上的双重div

  22. 22

    角度更换面板在同一位置

  23. 23

    徽标不在同一位置

  24. 24

    使用jQuery在同一位置显示项目

  25. 25

    如何保持文字在同一位置?

  26. 26

    希望p保持在同一位置

  27. 27

    如何使蓝色的位置点出现在我的Android应用程序中?

  28. 28

    如果ID再次出现在另一行上,则过滤包含关键字和ID的行

  29. 29

    稀有的画布副本出现在屏幕的另一部分,而不会降低性能。Android,Phonegap,JQM

热门标签

归档