Android WindowSoftInputMode.AdjustResize仍在平移

Le-*_*nes 4 android xamarin

我已经成功地在几个活动中实现了AdjustResize,但是特别是一个活动仍然拒绝做任何事情,但是当显示键盘时它会平移.

我有什么想法我做错了吗?

我正在使用xamarin属性,如下所示:

[Activity (
    LaunchMode=Android.Content.PM.LaunchMode.SingleTask, 
    Label = "Active Jobs", 
    MainLauncher = false, 
    Icon = "@drawable/icon", 
    WindowSoftInputMode = SoftInput.AdjustResize,
    ScreenOrientation = Android.Content.PM.ScreenOrientation.Portrait)]     
Run Code Online (Sandbox Code Playgroud)

编辑:此活动的基础axml布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:minWidth="25px"
        android:minHeight="25px"
        android:background="#FFFFFF"
        android:gravity="center|top"
        android:paddingTop="20dp"
        android:paddingLeft="20dp"
        android:paddingRight="20dp"
        android:paddingBottom="40dp">
        <TextView
            android:text="No active works on this device."
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:padding="0dp"
            android:gravity="center"
            android:layout_centerHorizontal="true"
            android:layout_alignParentTop="true"
            android:visibility="gone"
            android:textColor="#006985"
            android:textSize="30dp" />
        <ListView
            android:minWidth="25px"
            android:minHeight="25px"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:gravity="center"
            android:textColor="#006985"
            android:textSize="30dp"
            android:divider="@null"
            android:dividerHeight="-0.6dp"
            android:layout_gravity="top" />
    </LinearLayout>
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center|center"
        android:paddingLeft="40dp"
        android:paddingRight="40dp"
        android:paddingTop="40dp"
        android:paddingBottom="60dp"
        android:layout_alignParentBottom="true"
        android:visibility="gone"
        android:background="#006985"
        android:orientation="vertical">
        <EditText
            android:inputType="textNoSuggestions"
            android:layout_width="fill_parent"
            android:layout_height="80dp"
            android:background="#FFFFFF"
            android:textColor="#006985"
            android:textSize="30dp"
            android:paddingLeft="10dp"
            android:paddingRight="10dp"
            android:hint="Find..." />
        <Button
            android:text="Add New Task"
            android:layout_width="fill_parent"
            android:layout_height="100dp"
            android:background="@drawable/buttonHollowWhite"
            android:layout_centerHorizontal="true"
            android:textColor="#FFFFFF"
            android:textSize="30dp"
            android:layout_marginTop="40dp"
            android:layout_gravity="center" />
    </LinearLayout>
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

Le-*_*nes 5

请参阅Android中的此BUG

我已经根据StackOverflow的答案转换了为Xamarin.Android工作的解决方法.

要实现此修复,只需在您的activity OnCreate方法中添加以下代码即可.

AndroidBug5497WorkaroundForXamarinAndroid.assistActivity (this);
Run Code Online (Sandbox Code Playgroud)

全班是:

public class AndroidBug5497WorkaroundForXamarinAndroid {

    // For more information, see https://code.google.com/p/android/issues/detail?id=5497
    // To use this class, simply invoke assistActivity() on an Activity that already has its content view set.

    // CREDIT TO Joseph Johnson (https://stackoverflow.com/users/341631/joseph-johnson) for publishing the original Android solution on stackoverflow.com

    public static void assistActivity (Activity activity) {
        new AndroidBug5497WorkaroundForXamarinAndroid(activity);
    }

    private View mChildOfContent;
    private int usableHeightPrevious;
    private FrameLayout.LayoutParams frameLayoutParams;

    private AndroidBug5497WorkaroundForXamarinAndroid(Activity activity) {
        FrameLayout content = (FrameLayout) activity.FindViewById(Android.Resource.Id.Content);
        mChildOfContent = content.GetChildAt(0);
        ViewTreeObserver vto = mChildOfContent.ViewTreeObserver;
        vto.GlobalLayout += (object sender, EventArgs e) => {
            possiblyResizeChildOfContent();
        };
        frameLayoutParams = (FrameLayout.LayoutParams) mChildOfContent.LayoutParameters;
    }

    private void possiblyResizeChildOfContent() {
        int usableHeightNow = computeUsableHeight();
        if (usableHeightNow != usableHeightPrevious) {
            int usableHeightSansKeyboard = mChildOfContent.RootView.Height;
            int heightDifference = usableHeightSansKeyboard - usableHeightNow;
            if (heightDifference > (usableHeightSansKeyboard/4)) {
                // keyboard probably just became visible
                frameLayoutParams.Height = usableHeightSansKeyboard - heightDifference;
            } else {
                // keyboard probably just became hidden
                frameLayoutParams.Height = usableHeightSansKeyboard;
            }
            mChildOfContent.RequestLayout();
            usableHeightPrevious = usableHeightNow;
        }
    }

    private int computeUsableHeight() {
        Rect r = new Rect ();
        mChildOfContent.GetWindowVisibleDisplayFrame(r);
        return (r.Bottom - r.Top);
    }

}
Run Code Online (Sandbox Code Playgroud)