如何在EditText和Soft Keyboard之间添加边距?

时间:2014-01-29 20:00:43

标签: android android-fragments android-viewpager android-edittext android-keypad

我想在EditText和Soft Keyboard之间添加10dp的边距。

enter image description here 这是我的XML:

<RelativeLayout
    android:id="@+id/BottomLayout"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:background="@drawable/bottom_glass" >

    <EditText
        android:id="@+id/message"
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:background="@drawable/grey"
        android:ems="10"
        android:layout_marginBottom="10dp"
        android:hint="Enter Message"
        android:textColor="#ffffff" >


    </EditText>

    <ImageButton
        android:id="@+id/sendMessageButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_marginLeft="20dp"
        android:layout_toRightOf="@+id/message"
        android:background="@android:color/transparent"
        android:src="@drawable/sendselector" />

    <ImageButton
        android:id="@+id/imageButton2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_marginRight="20dp"
        android:layout_toLeftOf="@+id/message"
        android:background="@android:color/transparent"
        android:src="@drawable/sendmediaselector" />

</RelativeLayout>

这是我的onCreate()

    getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
    messageText.setOnTouchListener(new OnTouchListener(){

                @Override
                public boolean onTouch(View v, MotionEvent event) {
                            ((Swipe)getActivity()).getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_UNSPECIFIED);
                    return false;
                }});

我正在使用viewpager和全屏主题。以下EditText位于我的第3个片段中。

我使用了android:windowSoftInputMode="adjustResize|adjustPan"android:windowSoftInputMode="adjustResize",但没有发生任何事情。

6 个答案:

答案 0 :(得分:11)

我发现paddingBottom的属性可以影响editText和键盘之间的距离。你可以这样做:

<RelativeLayout   
  android:layout_width="match_parent"   
  android:layout_height="110dp"> 
  <ImageView
     android:layout_width="match_parent"
     android:layout_height="100dp"
     android:background="@drawable/your_edit_text_background"/>   
  <EditText
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:paddingBottom="10dp"/> 
</RelativeLayout>

这会使您的键盘边距为EditText 10dp

答案 1 :(得分:3)

这似乎有效,但对布局有一些不良影响。

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);

如果有人知道如何使用ADJUST_PAN,那就太棒了!

答案 2 :(得分:0)

我通过添加两行来解决同样的问题

EditText -

中添加此行
android:imeOptions="actionSend|flagNoEnterAction"

此行在Activity标记的Manifeast文件中添加 -

<activity
            android:name="----"
            android:icon="---"
            android:windowSoftInputMode="stateVisible|adjustResize"
            android:label="@string/app_name"
            android:theme="-----" />

并删除您用来执行此操作的所有代码,例如onTouchListner,它应该有效。

答案 3 :(得分:0)

在清单中的活动中添加android:windowSoftInputMode="adjustResize"应该可以解决此问题。 如果您的活动在全屏模式下运行,则此操作将无效。因此,在那种情况下,无需通过代码将其全屏显示,只需将样式<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">添加或更改为style.xml并将其用作您的AppTheme。 AdjustResize或AdjustPan都可以使用。

答案 4 :(得分:0)

Vasily Kabunov答案对我有用,但他的答案需要稍作更改才能起作用。下一个代码是:

editTextField.setOnFocusChangeListener(new OnFocusChangeListener() {

    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        // TODO Auto-generated method stub
        if (hasFocus) {
                Handler(Looper.getMainLooper()).postDelayed({
                    //Take care with this line I think that the scroll moves in px and not with dp.
                    scrollView.scrollBy(0, 80)
                }, 100) //You need to play with the time if your activity comes from onCreate and onResume you need to change this value to 1000.
            }

    });
}

并且您需要在ScrollView或RecyclerView中添加以下几行:

android:paddingBottom="80dp"
android:clipToPadding="false"

重要:如果您已激活全屏显示,则adjustResize和adjustPan标志将失效。

答案 5 :(得分:-1)

尝试在Company xyz = new Company(); xyz.hire(e1); 中添加RelativeLayout,然后在下面添加代码:

ScrollView