粉紅色的是DialogFragment。當鍵盤顯示時,它正在上升並重疊工具欄。我怎樣才能使對話框片段保持不變,只有edittext上升。
我用SOFT_INPUT_ADJUST_PAN或SOFT_INPUT_ADJUST_RESIZE但仍然片段上去
SOFT_INPUT_ADJUST_NOTHING:對話框和編輯文本保持不變,但我想編輯文本上去
任何幫助將不勝感激?
MainActivity.java:
public class HelloDialogFragment extends DialogFragment {
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.dialog_fragment, container, false);
return v;
}
@Override
public void onStart() {
super.onStart();
Dialog dialog = getDialog();
if (dialog != null && dialog.getWindow() != null) {
Window window = dialog.getWindow();
TypedValue tv = new TypedValue();
getContext().getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true);
int actionBarHeight = getResources().getDimensionPixelSize(tv.resourceId);
int statusBarHeight = (int) getResources().getDimension(R.dimen.status_bar_height);
window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
window.setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
WindowManager.LayoutParams params = window.getAttributes();
params.gravity = Gravity.LEFT | Gravity.TOP;
params.x = 200 + 2 * Utils.dpToPx(8);
params.y = statusBarHeight + actionBarHeight + Utils.dpToPx(8);
params.width = Utils.screenWidth()/3;
params.height = Utils.screenHeight() - statusBarHeight - actionBarHeight - 2 * Utils.dpToPx(8);
window.setAttributes(params);
dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
}
}
static class Utils {
public static int screenWidth() {
return Resources.getSystem().getDisplayMetrics().widthPixels;
}
public static int screenHeight() {
return Resources.getSystem().getDisplayMetrics().heightPixels;
}
public static int dpToPx(int dp) {
return (int) (dp * Resources.getSystem().getDisplayMetrics().density);
}
}
}
dialog_fragment.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#f2f"
android:orientation="vertical">
<View
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="1"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#E8E8E8"
android:gravity="center_vertical"
android:orientation="horizontal">
<EditText
android:id="@+id/chatEditText"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:layout_weight="1"
android:background="#fff"
android:hint="Enter"
android:padding="8dp"
android:textColor="#B0B0B0"
android:textDirection="locale"/>
<Button
android:id="@+id/sendButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="8dp"
android:background="@color/colorPrimary"
android:padding="8dp"
android:text="SEND"
android:textColor="#fff"/>
</LinearLayout>
</LinearLayout>
感謝您的幫助,但它不起作用 – maphongba008
如何使用'FrameLayout'封裝所有佈局並設置padding top然後設置'LayoutParams'這樣 'window.setFlags(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT);' –
我的對話框必須具有固定的位置,寬度/高度,所以無論該親本是的LinearLayout或的FrameLayout,這如果softInputMode是SOFT_INPUT_ADJUST_PAN或SOFT_INPUT_ADJUST_RESIZE – maphongba008