EditTextとソフトキーボードの間に10 dpのマージンを追加したい。
これが私の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"
_を使用しましたが、何も起こりませんでした。
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
これは機能するようですが、レイアウトに望ましくない影響を与えます。
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
ADJUST_PANでこれを機能させる方法を誰かが知っているなら、それは素晴らしいことです!
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は機能しません。
マニフェストのアクティビティにAndroid:windowSoftInputMode="adjustResize"
を追加すると、問題が解決するはずです。アクティビティがフルスクリーンで実行されている場合、これは機能しません。したがって、その場合は、コードを介してフルスクリーンにする代わりに、スタイル<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
をstyle.xmlに追加または変更し、これをAppThemeとして使用します。 adjustResizeまたはadjustPanの両方が機能します。
RelativeLayout
をScrollView
に追加してから、以下のコードを追加してください:
editTextField.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
// TODO Auto-generated method stub
if (hasFocus)
scrollView.scrollBy(0, 150);
});
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
のように、これを行うために使用するすべてのコードを削除すると、機能するはずです。