Android 输入法编辑器适用于横向,但不适用于纵向



屏幕顶部的背景使用以下主题,并且应该是透明的。在纵向模式下,背景变为黑色。有时这甚至不会发生,背景保持透明。为了测试这一点,我正在使用TED文本编辑器应用程序。正如我所说,背景在TED的纵向模式下会变黑。我编写了自己的活动,该活动具有多行文本输入字段,在此活动中,背景显示正确。在另一个示例中,当我尝试撰写新电子邮件时,我的 Gmail 应用程序中的背景在纵向模式下变为白色。

我在下面也展示了 IME 的一些布局。

    <resources>
        <!-- some styles here -->
        <style name="AppTheme.Custom"  parent="AppTheme.NoActionBar">
            <item name="android:windowActionBar">false</item>
            <item name="android:windowNoTitle">true</item>
            <item name="android:windowIsTranslucent" >false</item>
            <item name="android:windowIsFloating">true</item>
            <item name="android:windowCloseOnTouchOutside">true</item>
            <item name="android:colorBackgroundCacheHint">@android:color/transparent</item>
            <item name="android:backgroundDimEnabled">false</item>
            <item name="android:windowContentOverlay">@android:color/transparent</item>
            <item name="android:backgroundDimAmount">0.5</item>
        </style>
    </resources>

下面是 IME 的一些布局:

    <?xml version="1.0" encoding="utf-8"?>
    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentBottom="true"
        >
        <LinearLayout
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:weightSum="1"
            android:theme="@style/AppTheme">
            <LinearLayout
                android:background="#00000000"
                android:orientation="horizontal"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_weight="0.5"
                android:theme="@style/AppTheme.Custom"
                android:layout_gravity="top"
                android:id="@+id/topHalf"></LinearLayout>
            <include layout="@layout/content_main"
                android:layout_weight="0.5"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:theme="@style/AppTheme"
                android:layout_gravity="bottom"
                />
        </LinearLayout>
    </FrameLayout>

因此,如果我使用布局填充屏幕,然后使用权重将布局一分为二,然后使布局的上半部分透明,这是行不通的,因为当您单击透明区域时,它仍在布局内,并且样式规则的工作方式是"windowCloseOnTouchOutside"。我所要做的就是设置一个覆盖整个屏幕的布局,然后以编程方式测量整个屏幕,并将布局的大小重新设置为屏幕大小的一半(再次以编程方式(,并将重力设置为 BOTTOM。下面是用于测量屏幕尺寸的代码,下面是用于调整布局大小的代码。

    WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
    Display display = wm.getDefaultDisplay();
    DisplayMetrics metrics = new DisplayMetrics();
    display.getMetrics(metrics);
    val.mWindowHeight = metrics.heightPixels;
    val.mWindowWidth = metrics.widthPixels;

调整布局大小。 就我而言,我需要自己膨胀布局。

    inputView = (RelativeLayout) getLayoutInflater().inflate(R.layout.content_main, null);
    ...
    FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, val.mWindowHeight/2);
    lp.gravity = Gravity.BOTTOM ;
    lp.height = val.mWindowHeight/2;
    inputView.setLayoutParams(lp);

我希望这对某人有所帮助。

相关内容

  • 没有找到相关文章

最新更新