在底部添加带有编辑文本的布局,如果编辑文本没有聚焦,则隐藏它

时间:2017-06-27 15:28:23

标签: android layout android-edittext

按下按钮"加"如何在底部添加编辑文本时添加布局如果编辑文本未聚焦,则隐藏布局 请看这张图片 example

2 个答案:

答案 0 :(得分:0)

您的布局必须包含ListViewEditTextFloatingActionButton。将所有这些放在RelativeLayout内。这方面的一个例子是

<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:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"    
tools:context="abcd.MainActivity">

<android.support.design.widget.FloatingActionButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:clickable="true"
    android:id="@+id/fab"
    android:layout_alignParentBottom="true"
    android:layout_alignParentEnd="true"/>

<android.support.design.widget.TextInputLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_toLeftOf="@id/fab"
    android:layout_alignParentBottom="true"
    android:layout_alignParentStart="true">

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Input"
        android:id="@+id/input"
        />
</android.support.design.widget.TextInputLayout>

<ListView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_alignParentTop="true"
    android:layout_alignParentStart="true"
    android:layout_above="@id/fab"
    android:divider="@android:color/transparent"
    android:id="@+id/list"/>
</RelativeLayout>

默认情况下,后退按钮执行关闭TextInputLayout的功能。要在外面触摸它时将其关闭,您可以将以下内容添加到您的活动中。

@Override
public boolean dispatchTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
    View v = getCurrentFocus();
    if ( v instanceof EditText) {
        Rect outRect = new Rect();
        v.getGlobalVisibleRect(outRect);
        if (!outRect.contains((int)event.getRawX(), (int)event.getRawY())) {
            v.clearFocus();
            InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
        }
    }
}
return super.dispatchTouchEvent( event );
}

答案 1 :(得分:0)

OnFocusChangeListener添加到EditText并在覆盖的onFocusChange(View v, boolean hasFocus)方法内添加或删除基于hasFocus值的布局(如果它具有焦点,则为true)。

有关OnFocusChangeListener

的更多信息,请参阅this