web-dev-qa-db-ja.com

EditTextとソフトキーボードの間にマージンを追加するにはどうすればよいですか?

EditTextとソフトキーボードの間に10 dpのマージンを追加したい。

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"_を使用しましたが、何も起こりませんでした。

29
Punit

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

13
summer1991

これは機能するようですが、レイアウトに望ましくない影響を与えます。

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

ADJUST_PANでこれを機能させる方法を誰かが知っているなら、それは素晴らしいことです!

3
Veeru

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は機能しません。

0
jordiz

マニフェストのアクティビティにAndroid:windowSoftInputMode="adjustResize"を追加すると、問題が解決するはずです。アクティビティがフルスクリーンで実行されている場合、これは機能しません。したがって、その場合は、コードを介してフルスクリーンにする代わりに、スタイル<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">をstyle.xmlに追加または変更し、これをAppThemeとして使用します。 adjustResizeまたはadjustPanの両方が機能します。

0
Eldhose

RelativeLayoutScrollViewに追加してから、以下のコードを追加してください:

editTextField.setOnFocusChangeListener(new OnFocusChangeListener() {

    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        // TODO Auto-generated method stub
        if (hasFocus)
             scrollView.scrollBy(0, 150);

    });
0
Michail Ostryj

2行追加するだけで同じ問題を解決しました

この行をEditTextに追加します-

Android:imeOptions="actionSend|flagNoEnterAction"

Activityタグ内のManifeastファイルのこの行を追加-

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

onTouchListnerのように、これを行うために使用するすべてのコードを削除すると、機能するはずです。

0
Sushant Gosavi