如果打开,如何在键盘上方引发EditText?

时间:2015-08-06 05:38:07

标签: android android-edittext

我使用主题

<style name="Theme.TransparencyDemo" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:windowTranslucentStatus">true</item>
        <item name="android:windowTranslucentNavigation">true</item>
    </style>

布局上有一些形式。表单有一些EditTexts。如果editText有焦点打开键盘。我想在键盘上面我的editText,但它不起作用。我的所有布局都在上升。这是错的。我的朋友:

<?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"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="@drawable/background_purple"
                android:orientation="vertical"
                android:weightSum="1">

    <RelativeLayout
        android:id="@+id/relativeLayout2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="38.50dp"
        android:orientation="horizontal"
        android:layout_alignParentTop="true"
        android:layout_alignParentStart="true">

        <ImageView
            android:id="@+id/imageMenu"
            android:layout_width="43dp"
            android:layout_height="43dp"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:layout_marginLeft="14.50dp"
            android:layout_weight="1"
            android:src="@drawable/back_login"
            />

        <com.skip.client.customer.utils.MyTextView2D
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Back"
            android:id="@+id/textView44"
            android:layout_centerVertical="true"
            android:layout_toEndOf="@+id/imageMenu"
            android:layout_marginLeft="7dp"
            android:textColor="#ffffff"
            android:textSize="16.8dp"
            android:textStyle="bold"
            android:layout_marginTop="11dp"
            style="@style/CustomTextViewStyle"/>
    </RelativeLayout>

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="15dip"
        android:layout_marginRight="15dip"
        android:orientation="vertical"
        android:layout_above="@+id/linearLayout16"
        android:layout_centerHorizontal="true">

        <com.skip.client.customer.utils.MyTextView2D
            android:id="@+id/textView17"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:layout_weight="4"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:textColor="#ffffff"
            android:textSize="24dp"
            android:textStyle="bold"
            android:layout_alignBottom="@+id/progressBar"
            android:layout_centerHorizontal="true"
            android:text="Almost there!"
            style="@style/CustomTextViewStyle"/>

        <RelativeLayout
            android:layout_width="116dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            >

            <com.pkmmte.view.CircularImageView
                android:id="@+id/receiptImageView"
                android:layout_width="116dp"
                android:layout_height="116dp"
                android:layout_alignParentBottom="false"
                android:layout_alignParentEnd="false"
                android:layout_alignParentLeft="false"
                android:layout_alignParentRight="false"
                android:layout_alignParentStart="false"
                android:layout_alignParentTop="false"
                android:layout_alignWithParentIfMissing="false"
                android:layout_gravity="center_horizontal"
                android:layout_marginTop="25dp"
                android:src="@drawable/profile_photo"
                app:border="true"
                app:border_width="4dp"
                app:border_color="#ffffff"/>

            <ProgressBar
                android:id="@+id/progressBar"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerHorizontal="true"
                android:layout_centerVertical="true"
                android:indeterminate="false"
                android:visibility="gone"/>

            <ImageView
                android:layout_width="33dp"
                android:layout_height="33dp"
                android:id="@+id/imageView2"
                android:background="@drawable/avatar_plus"
                android:layout_alignTop="@+id/progressBar"
                android:layout_alignParentEnd="true"
                android:layout_marginTop="32dp"/>

        </RelativeLayout>
    </LinearLayout>
    <ScrollView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/scrollView"
        android:layout_below="@+id/linearLayout16"
        android:layout_alignParentStart="true">

    </ScrollView>

    <LinearLayout
        android:id="@+id/applyButton"
        android:layout_width="match_parent"
        android:layout_height="67dp"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="false"
        android:layout_alignParentStart="false"
        android:layout_alignParentTop="false"
        android:background="#007bb6"
        android:gravity="center_vertical|center_horizontal"
        android:orientation="vertical">

        <com.skip.client.customer.utils.MyTextView2D
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Continue"
            android:textColor="#ffffff"
            android:textSize="17.76dp"
            android:textStyle="bold"
            style="@style/CustomTextViewStyle"/>
    </LinearLayout>

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:layout_above="@+id/applyButton"
        android:layout_alignParentStart="true"
        android:id="@+id/linearLayout16">




        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="15dp"
            android:layout_marginLeft="25dp"
            android:layout_marginRight="25dp"
            android:orientation="vertical">

            <EditText
                android:id="@+id/editEmail"
                android:layout_width="match_parent"
                android:layout_height="50dp"
                android:autoText="false"
                android:background="#00000000"
                android:ems="10"
                android:hint="Your email"
                android:inputType="textEmailAddress"
                android:nextFocusDown="@+id/editPassword"
                android:paddingLeft="2dp"
                android:paddingRight="2dp"
                android:singleLine="false"
                android:textColor="#ffffff"
                android:textColorHint="#9377ab"
                android:textSize="19sp"
                android:textStyle="bold"
                android:gravity="center_vertical|center_horizontal"/>

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="center_vertical"
                android:layout_marginTop="16dp"
                android:gravity="center_vertical"
                android:orientation="horizontal"
                android:paddingBottom="8.50dp">

                <EditText
                    android:id="@+id/editFirstName"
                    android:layout_width="0dp"
                    android:layout_height="50dp"
                    android:layout_weight="1.09"
                    android:background="#00000000"
                    android:ems="10"
                    android:hint="Your first name"
                    android:inputType="text"
                    android:maxLength="254"
                    android:singleLine="true"
                    android:nextFocusDown="@+id/editLastName"
                    android:textColor="#ffffff"
                    android:textColorHint="#9377ab"
                    android:textSize="19sp"
                    android:textStyle="bold"
                    android:gravity="center_vertical|center_horizontal"
                    android:layout_marginRight="3dp"/>

                <View
                    android:layout_width="1dp"
                    android:layout_height="20dp"
                    android:background="#ffffff" />

                <EditText
                    android:id="@+id/editLastName"
                    android:layout_width="0dp"
                    android:layout_height="50dp"
                    android:layout_weight="1"
                    android:background="#00000000"
                    android:ems="10"
                    android:hint="Your last name"
                    android:imeOptions="actionDone"
                    android:inputType="text"
                    android:maxLength="254"
                    android:singleLine="true"
                    android:nextFocusDown="@+id/editPhone"
                    android:textColor="#ffffff"
                    android:textColorHint="#9377ab"
                    android:textSize="19sp"
                    android:textStyle="bold"
                    android:gravity="center_vertical|center_horizontal"
                    android:layout_marginRight="3dp"/>
            </LinearLayout>

            <EditText
                android:id="@+id/editPhone"
                android:layout_width="match_parent"
                android:layout_height="50dp"
                android:background="#00000000"
                android:ems="10"
                android:hint="Your Phone number"
                android:inputType="text|phone"
                android:nextFocusDown="@+id/editFirstName"
                android:paddingLeft="2dp"
                android:paddingRight="2dp"
                android:textColor="#ffffff"
                android:textColorHint="#9377ab"
                android:textSize="19sp"
                android:textStyle="bold"
                android:gravity="center_vertical|center_horizontal"
                android:layout_marginTop="12dp"/>

            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                android:gravity="center_vertical"
                android:orientation="horizontal"
                android:layout_marginTop="2dp">

                <LinearLayout
                    android:layout_width="90dp"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_vertical"
                    android:background="@drawable/line_white"
                    android:orientation="horizontal"
                    android:paddingBottom="17.25dp"
                    android:paddingTop="19.75dp"
                    android:layout_marginLeft="3dp">

                    <com.skip.client.customer.customviews.SkipTextView
                        android:id="@+id/tvDob"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_marginRight="2dp"
                        android:background="#00000000"
                        android:ems="10"
                        android:hint="Age"
                        android:inputType="number"
                        android:paddingLeft="2dp"
                        android:textColor="#ffffff"
                        android:textColorHint="#9377ab"
                        android:textSize="19sp"
                        android:textStyle="bold"
                        android:gravity="center_horizontal"/>
                </LinearLayout>


                <RadioGroup
                    android:id="@+id/radioSex"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="14.50dp"
                    android:layout_marginTop="1.75dp"
                    android:gravity="right"
                    android:orientation="horizontal"
                    android:layout_gravity="bottom">

                    <RadioButton
                        android:id="@+id/radioMale"
                        android:layout_width="93dp"
                        android:layout_height="41dp"
                        android:background="@drawable/radio_button_background_reg"
                        android:button="@android:color/transparent"
                        android:checked="true"
                        android:gravity="center_vertical|center_horizontal"
                        android:text="Male"
                        android:textColor="#ffffff"
                        android:textSize="19sp"
                        android:textStyle="bold"
                        android:textColorHint="#9377ab"
                        android:layout_marginLeft="5dp"
                        android:autoText="false"/>

                    <RadioButton
                        android:id="@+id/radioFemale"
                        android:layout_width="93dp"
                        android:layout_height="41dp"
                        android:layout_marginLeft="5dp"
                        android:background="@drawable/radio_button_background_reg"
                        android:button="@android:color/transparent"
                        android:checked="false"
                        android:gravity="center_vertical|center_horizontal"
                        android:singleLine="true"
                        android:text="Female"
                        android:textColor="#ffffff"
                        android:textSize="19sp"
                        android:textStyle="bold"
                        android:textColorHint="#9377ab"
                        android:autoText="false"/>
                </RadioGroup>

            </LinearLayout>


            <EditText
                android:id="@+id/do_not_remove"
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_gravity="center_vertical"
                android:layout_marginBottom="50dip"
                android:layout_marginLeft="15dip"
                android:layout_marginRight="15dip"
                android:layout_marginTop="5dp"
                android:background="@drawable/line_white"
                android:ems="10"
                android:inputType="textPersonName"
                android:paddingBottom="19.50dp"
                android:paddingLeft="2dp"
                android:paddingRight="2dp"
                android:textColor="#ffffff"
                android:textColorHint="#ffffff"
                android:textStyle="bold" />

        </LinearLayout>

    </LinearLayout>

</RelativeLayout>

在我写的表现中:

<activity
            android:name=".activities.StartActivity"
            android:theme="@style/Theme.TransparencyDemo"
            android:configChanges="orientation|screenSize"
            android:screenOrientation="portrait"/>

我想滚动scrollView并在键盘上方引发EditText

不仅仅是一个例子

<?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"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:orientation="vertical"
              android:weightSum="1"
              android:background="#376e0a">


    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/editText"
        android:layout_gravity="center_horizontal"
        android:layout_alignParentBottom="true"
        android:layout_alignParentStart="true"
        android:layout_marginBottom="62dp"
        android:background="#420603"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="New Text"
        android:id="@+id/textView"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"/>

</RelativeLayout>

2 个答案:

答案 0 :(得分:0)

添加以下

android:windowSoftInputMode="stateVisible|adjustResize"

在你的清单文件中。

答案 1 :(得分:0)

类似的问题。

Adjust layout when soft keyboard is on

这是一个像Evernote登录界面一样的解决方案:

首先,定义一个类似于你的特殊LinearLayout的类:

public class MyLayout extends LinearLayout {

public MyLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}

public MyLayout(Context context) {
super(context);
}

private OnSoftKeyboardListener onSoftKeyboardListener;

@Override
protected void onMeasure(final int widthMeasureSpec, final int    heightMeasureSpec) {
if (onSoftKeyboardListener != null) {
    final int newSpec = MeasureSpec.getSize(heightMeasureSpec); 
    final int oldSpec = getMeasuredHeight();
    if (oldSpec > newSpec){
        onSoftKeyboardListener.onShown();
    } else {
        onSoftKeyboardListener.onHidden();
    }
}
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}

public final void setOnSoftKeyboardListener(final OnSoftKeyboardListener listener) {
this.onSoftKeyboardListener = listener;
}

public interface OnSoftKeyboardListener {
public void onShown();
public void onHidden();
}

}

此布局侦听测量更改,并且如果新测量结果为&lt;比旧的,这意味着屏幕的一部分被软键盘吃掉。

虽然,为了它的工作,在你的清单中你需要设置android:windowSoftInputMode =&#34; adjustResize&#34;所以内容将被调整大小而不仅仅是转移。

整个系统的工作原理如下:你有你的布局:

<MyLayout id="layout">
<SomeImage id="image"/>
<SomeText>
<SomeInput>
</MyLayout>

就像evernotes登录屏幕一样。然后,在你的活动中:

((MyLayout)findViewById(R.id.layout)).setOnSoftKeyboardListener(new OnSoftKeyboardListener() {
    @Override
    public void onShown() {
        findViewById(R.id.image).setVisibility(View.GONE);
    }
    @Override
    public void onHidden() {
        findViewById(R.id.image).setVisibility(View.VISIBLE);
    }
    });

然后转到manifest.xml并设置

android:windowSoftInputMode="adjustResize"

将会发生什么,当显示软键盘时,它会隐藏图像并调整其余内容的大小。 (您实际上可以看到如何在Evernote中调整文本大小)

图像隐藏当然是您可以做的许多事情之一。但是你必须要小心,因为不同的布局变化也会调用onMeasure。

当然,这是一个肮脏的变种。您需要检查方向变化,以及实际进行测量时的正确时间,以及在将新规格与旧规格进行比较时可能需要更多逻辑。但我认为这是唯一的方法。